@@ -89,6 +89,10 @@ trim_trailing_whitespace = unset
|
||||
end_of_line = unset
|
||||
insert_final_newline = unset
|
||||
|
||||
# see https://manual.jule.dev/project/code-style.html#indentions
|
||||
[*.jule]
|
||||
indent_style = tab
|
||||
|
||||
# Keep this hint at the bottom:
|
||||
# Please don't add entries for subfolders here.
|
||||
# Create <subfolder>/.editorconfig instead.
|
||||
|
||||
@@ -20,6 +20,7 @@ ghc.section.md
|
||||
gnome.section.md
|
||||
haredo.section.md
|
||||
installShellFiles.section.md
|
||||
julec.section.md
|
||||
just.section.md
|
||||
libiconv.section.md
|
||||
libxml2.section.md
|
||||
|
||||
77
doc/hooks/julec.section.md
Normal file
77
doc/hooks/julec.section.md
Normal file
@@ -0,0 +1,77 @@
|
||||
# julec.hook {#julec-hook}
|
||||
|
||||
[Jule](https://jule.dev) is an effective programming language designed to build efficient, fast, reliable and safe software while maintaining simplicity.
|
||||
|
||||
In Nixpkgs, `jule.hook` overrides the default build, check and install phases.
|
||||
|
||||
## Example code snippet {#julec-hook-example-code-snippet}
|
||||
|
||||
```nix
|
||||
{
|
||||
julec,
|
||||
clangStdenv,
|
||||
}:
|
||||
|
||||
clangStdenv.mkDerivation (finalAttrs: {
|
||||
# ...
|
||||
|
||||
nativeBuildInputs = [ julec.hook ];
|
||||
|
||||
# Customize filenames if needed
|
||||
JULE_SRC_DIR = "./src";
|
||||
JULE_OUT_DIR = "./bin";
|
||||
JULE_OUT_NAME = "hello-jule";
|
||||
JULE_TEST_DIR = "./tests";
|
||||
JULE_TEST_OUT_DIR = "./test-bin";
|
||||
JULE_TEST_OUT_NAME = "hello-jule-test";
|
||||
|
||||
# ...
|
||||
})
|
||||
```
|
||||
|
||||
## Variables controlling julec.hook {#julec-hook-variables}
|
||||
|
||||
### `JULE_SRC_DIR` {#julec-hook-variable-jule-src-dir}
|
||||
|
||||
Specifies the source directory containing `main.jule`.
|
||||
Default is `./src`.
|
||||
|
||||
### `JULE_OUT_DIR` {#julec-hook-variable-jule-out-dir}
|
||||
|
||||
Specifies the output directory for the compiled binary.
|
||||
Default is `./bin`.
|
||||
|
||||
### `JULE_OUT_NAME` {#julec-hook-variable-jule-out-name}
|
||||
|
||||
Specifies the name of the compiled binary.
|
||||
Default is `output`.
|
||||
|
||||
### `JULE_TEST_DIR` {#julec-hook-variable-jule-test-dir}
|
||||
|
||||
Specifies the directory containing test files.
|
||||
Default is the value of [`JULE_SRC_DIR`](#julec-hook-variable-jule-src-dir).
|
||||
|
||||
### `JULE_TEST_OUT_DIR` {#julec-hook-variable-jule-test-out-dir}
|
||||
|
||||
Specifies the output directory for compiled test binaries.
|
||||
Default is the value of [`JULE_OUT_DIR`](#julec-hook-variable-jule-out-dir).
|
||||
|
||||
### `JULE_TEST_OUT_NAME` {#julec-hook-variable-jule-test-out-name}
|
||||
|
||||
Specifies the name of the compiled test binary.
|
||||
Default is the value of [`JULE_OUT_NAME`](#julec-hook-variable-jule-out-name) with `-test` suffix.
|
||||
|
||||
### `dontUseJulecBuild` {#julec-hook-variable-dontusejulecbuild}
|
||||
|
||||
When set to true, doesn't use the predefined `julecBuildHook`.
|
||||
Default is false.
|
||||
|
||||
### `dontUseJulecCheck` {#julec-hook-variable-dontusejuleccheck}
|
||||
|
||||
When set to true, doesn't use the predefined `julecCheckHook`.
|
||||
Default is false.
|
||||
|
||||
### `dontUseJulecInstall` {#julec-hook-variable-dontusejulecinstall}
|
||||
|
||||
When set to true, doesn't use the predefined `julecInstallHook`.
|
||||
Default is false.
|
||||
@@ -124,6 +124,42 @@
|
||||
"inkscape-plugins": [
|
||||
"index.html#inkscape-plugins"
|
||||
],
|
||||
"julec-hook": [
|
||||
"index.html#julec-hook"
|
||||
],
|
||||
"julec-hook-example-code-snippet": [
|
||||
"index.html#julec-hook-example-code-snippet"
|
||||
],
|
||||
"julec-hook-variable-dontusejulecbuild": [
|
||||
"index.html#julec-hook-variable-dontusejulecbuild"
|
||||
],
|
||||
"julec-hook-variable-dontusejuleccheck": [
|
||||
"index.html#julec-hook-variable-dontusejuleccheck"
|
||||
],
|
||||
"julec-hook-variable-dontusejulecinstall": [
|
||||
"index.html#julec-hook-variable-dontusejulecinstall"
|
||||
],
|
||||
"julec-hook-variable-jule-out-dir": [
|
||||
"index.html#julec-hook-variable-jule-out-dir"
|
||||
],
|
||||
"julec-hook-variable-jule-out-name": [
|
||||
"index.html#julec-hook-variable-jule-out-name"
|
||||
],
|
||||
"julec-hook-variable-jule-src-dir": [
|
||||
"index.html#julec-hook-variable-jule-src-dir"
|
||||
],
|
||||
"julec-hook-variable-jule-test-dir": [
|
||||
"index.html#julec-hook-variable-jule-test-dir"
|
||||
],
|
||||
"julec-hook-variable-jule-test-out-dir": [
|
||||
"index.html#julec-hook-variable-jule-test-out-dir"
|
||||
],
|
||||
"julec-hook-variable-jule-test-out-name": [
|
||||
"index.html#julec-hook-variable-jule-test-out-name"
|
||||
],
|
||||
"julec-hook-variables": [
|
||||
"index.html#julec-hook-variables"
|
||||
],
|
||||
"major-ghc-deprecation": [
|
||||
"index.html#major-ghc-deprecation"
|
||||
],
|
||||
|
||||
15
pkgs/by-name/ju/julec/hook.nix
Normal file
15
pkgs/by-name/ju/julec/hook.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
julec,
|
||||
clang,
|
||||
makeSetupHook,
|
||||
}:
|
||||
|
||||
makeSetupHook {
|
||||
name = "julec-hook";
|
||||
|
||||
propagatedBuildInputs = [ julec ];
|
||||
|
||||
meta = {
|
||||
inherit (julec.meta) maintainers;
|
||||
};
|
||||
} ./hook.sh
|
||||
80
pkgs/by-name/ju/julec/hook.sh
Normal file
80
pkgs/by-name/ju/julec/hook.sh
Normal file
@@ -0,0 +1,80 @@
|
||||
# shellcheck shell=bash disable=SC2154,SC2034
|
||||
|
||||
julecSetEnv() {
|
||||
if [ -z "$JULE_SRC_DIR" ]; then
|
||||
export JULE_SRC_DIR='./src'
|
||||
fi
|
||||
if [ -z "$JULE_OUT_DIR" ]; then
|
||||
export JULE_OUT_DIR='./bin'
|
||||
fi
|
||||
if [ -z "$JULE_OUT_NAME" ]; then
|
||||
export JULE_OUT_NAME='output'
|
||||
fi
|
||||
if [ -z "$JULE_TEST_DIR" ]; then
|
||||
export JULE_TEST_DIR="$JULE_SRC_DIR"
|
||||
fi
|
||||
if [ -z "$JULE_TEST_OUT_DIR" ]; then
|
||||
export JULE_TEST_OUT_DIR="$JULE_OUT_DIR"
|
||||
fi
|
||||
if [ -z "$JULE_TEST_OUT_NAME" ]; then
|
||||
export JULE_TEST_OUT_NAME="$JULE_OUT_NAME-test"
|
||||
fi
|
||||
}
|
||||
|
||||
julecBuildHook() {
|
||||
echo "Executing julecBuildHook"
|
||||
|
||||
runHook preBuild
|
||||
|
||||
julecSetEnv
|
||||
mkdir -p "$JULE_OUT_DIR"
|
||||
julec --opt L2 -p -o "$JULE_OUT_DIR/$JULE_OUT_NAME" "$JULE_SRC_DIR"
|
||||
|
||||
runHook postBuild
|
||||
|
||||
echo "Finished julecBuildHook"
|
||||
}
|
||||
|
||||
julecCheckHook() {
|
||||
echo "Executing julecCheckHook"
|
||||
|
||||
runHook preCheck
|
||||
|
||||
echo "Building tests..."
|
||||
|
||||
julecSetEnv
|
||||
mkdir -p "$JULE_TEST_OUT_DIR"
|
||||
julec test -o "$JULE_TEST_OUT_DIR/$JULE_TEST_OUT_NAME" "$JULE_TEST_DIR"
|
||||
|
||||
echo "Running tests..."
|
||||
|
||||
"$JULE_TEST_OUT_DIR/$JULE_TEST_OUT_NAME"
|
||||
|
||||
runHook postCheck
|
||||
|
||||
echo "Finished julecCheckHook"
|
||||
}
|
||||
|
||||
julecInstallHook() {
|
||||
echo "Executing julecInstallHook"
|
||||
|
||||
runHook preInstall
|
||||
|
||||
julecSetEnv
|
||||
mkdir -p "$out/bin"
|
||||
cp -r "$JULE_OUT_DIR/$JULE_OUT_NAME" "$out/bin/"
|
||||
|
||||
runHook postInstall
|
||||
|
||||
echo "Finished julecInstallHook"
|
||||
}
|
||||
|
||||
if [ -z "${dontUseJulecBuild-}" ] && [ -z "${buildPhase-}" ]; then
|
||||
buildPhase=julecBuildHook
|
||||
fi
|
||||
if [ -z "${dontUseJulecCheck-}" ] && [ -z "${checkPhase-}" ]; then
|
||||
checkPhase=julecCheckHook
|
||||
fi
|
||||
if [ -z "${dontUseJulecInstall-}" ] && [ -z "${installPhase-}" ]; then
|
||||
installPhase=julecInstallHook
|
||||
fi
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
lib,
|
||||
clangStdenv,
|
||||
callPackage,
|
||||
fetchFromGitHub,
|
||||
}:
|
||||
|
||||
@@ -93,6 +94,12 @@ clangStdenv.mkDerivation (finalAttrs: {
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
# see doc/hooks/julec.section.md
|
||||
hook = callPackage ./hook.nix { julec = finalAttrs.finalPackage; };
|
||||
tests.hello-jule = callPackage ./test { julec = finalAttrs.finalPackage; };
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Jule Programming Language Compiler";
|
||||
longDescription = ''
|
||||
|
||||
19
pkgs/by-name/ju/julec/test/default.nix
Normal file
19
pkgs/by-name/ju/julec/test/default.nix
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
julec,
|
||||
clangStdenv,
|
||||
}:
|
||||
|
||||
clangStdenv.mkDerivation (finalAttrs: {
|
||||
pname = "hello-jule";
|
||||
inherit (julec) version;
|
||||
|
||||
src = ./hello-jule;
|
||||
|
||||
nativeBuildInputs = [ julec.hook ];
|
||||
|
||||
doCheck = true;
|
||||
|
||||
meta = {
|
||||
inherit (julec.meta) platforms;
|
||||
};
|
||||
})
|
||||
0
pkgs/by-name/ju/julec/test/hello-jule/jule.mod
Normal file
0
pkgs/by-name/ju/julec/test/hello-jule/jule.mod
Normal file
8
pkgs/by-name/ju/julec/test/hello-jule/src/_test.jule
Normal file
8
pkgs/by-name/ju/julec/test/hello-jule/src/_test.jule
Normal file
@@ -0,0 +1,8 @@
|
||||
use "std/testing"
|
||||
|
||||
#test
|
||||
fn testPi(t: &testing::T) {
|
||||
if getPi() != 3.14 {
|
||||
t.Errorf("PI not precise enough")
|
||||
}
|
||||
}
|
||||
7
pkgs/by-name/ju/julec/test/hello-jule/src/main.jule
Normal file
7
pkgs/by-name/ju/julec/test/hello-jule/src/main.jule
Normal file
@@ -0,0 +1,7 @@
|
||||
fn main() {
|
||||
println("Hello, Jule!");
|
||||
}
|
||||
|
||||
fn getPi(): f64 {
|
||||
ret 3.14;
|
||||
}
|
||||
Reference in New Issue
Block a user