From 4e9091b5ec4546df18f036164bd3348834a0518b Mon Sep 17 00:00:00 2001
From: Thakee Nathees
Date: Sun, 1 May 2022 13:26:27 +0530
Subject: [PATCH] scripts are moved to scritps/ directory
---
.github/workflows/build.yml | 12 +--
.gitignore | 2 +-
Makefile | 29 ++++---
README.md | 13 +--
cli/internal.h | 2 +-
scripts/README.md | 41 ++++++++++
build.bat => scripts/build.bat | 50 +++++++-----
scripts/download_premake.py | 48 +++++++++++
cli/native.py => scripts/generate_native.py | 3 +
scripts/premake5.lua | 80 +++++++++++++++++++
.../run_benchmarks.py | 65 ++++++++-------
tests/tests.py => scripts/run_tests.py | 40 ++++------
tests/check.py => scripts/static_check.py | 30 +++----
13 files changed, 299 insertions(+), 116 deletions(-)
create mode 100644 scripts/README.md
rename build.bat => scripts/build.bat (80%)
create mode 100644 scripts/download_premake.py
rename cli/native.py => scripts/generate_native.py (97%)
create mode 100644 scripts/premake5.lua
rename tests/benchmarks/benchmarks.py => scripts/run_benchmarks.py (82%)
rename tests/tests.py => scripts/run_tests.py (79%)
rename tests/check.py => scripts/static_check.py (90%)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 94242f5..0b9a398 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -8,9 +8,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- - name: Run check.py script.
+ - name: Run static checks.
run: |
- python3 tests/check.py
+ python3 scripts/static_check.py
## Compile and run test on linux.
linux-build:
@@ -22,7 +22,7 @@ jobs:
make all
- name: Run tests.
run: |
- python3 tests/tests.py
+ python3 scripts/run_tests.py
## Compile and run tests on windows.
windows-build:
@@ -31,10 +31,10 @@ jobs:
- uses: actions/checkout@v2
- name: Run build batch script.
run: |
- cmd /c build.bat
+ cmd /c scripts\build.bat
- name: Run tests.
run: |
- python3 tests/tests.py
+ python3 scripts/run_tests.py
## Compile and run tests on macos.
macos-build:
@@ -46,6 +46,6 @@ jobs:
make all
- name: Run tests.
run: |
- python3 tests/tests.py
+ python3 scripts/run_tests.py
diff --git a/.gitignore b/.gitignore
index 51987eb..2dc8056 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,7 +6,7 @@
.DS_Store
build/
-tests/benchmarks/report.html
+scripts/report.html
docs/build/
docs/static/wasm/
diff --git a/Makefile b/Makefile
index 2675cfa..5870feb 100644
--- a/Makefile
+++ b/Makefile
@@ -9,12 +9,15 @@ RELEASE_CFLAGS = -g -O3
LDFLAGS = -lm
TARGET_EXEC = pocket
-BUILD_DIR = ./build
+BUILD_DIR = ./build/
-SRC_DIRS = ./src ./cli
-INC_DIRS = ./src/include
+SRC_DIRS = ./src/ ./cli/
+INC_DIRS = ./src/include/
-SRCS := $(foreach DIR,$(SRC_DIRS),$(wildcard $(DIR)/*.c))
+BIN_DIR = bin/
+OBJ_DIR = obj/
+
+SRCS := $(foreach DIR,$(SRC_DIRS),$(wildcard $(DIR)*.c))
OBJS := $(SRCS:.c=.o)
DEPS := $(OBJS:.o=.d)
@@ -22,13 +25,13 @@ INC_FLAGS := $(addprefix -I,$(INC_DIRS))
DEP_FLAGS = -MMD -MP
CC_FLAGS = $(INC_FLAGS) $(DEP_FLAGS) $(CFLAGS)
-DEBUG_DIR = $(BUILD_DIR)/debug
-DEBUG_TARGET = $(DEBUG_DIR)/$(TARGET_EXEC)
-DEBUG_OBJS := $(addprefix $(DEBUG_DIR)/, $(OBJS))
+DEBUG_DIR = $(BUILD_DIR)Debug/
+DEBUG_TARGET = $(DEBUG_DIR)$(BIN_DIR)$(TARGET_EXEC)
+DEBUG_OBJS := $(addprefix $(DEBUG_DIR)$(OBJ_DIR), $(OBJS))
-RELEASE_DIR = $(BUILD_DIR)/release
-RELEASE_TARGET = $(RELEASE_DIR)/$(TARGET_EXEC)
-RELEASE_OBJS := $(addprefix $(RELEASE_DIR)/, $(OBJS))
+RELEASE_DIR = $(BUILD_DIR)Release/
+RELEASE_TARGET = $(RELEASE_DIR)$(BIN_DIR)$(TARGET_EXEC)
+RELEASE_OBJS := $(addprefix $(RELEASE_DIR)$(OBJ_DIR), $(OBJS))
.PHONY: debug release all clean
@@ -36,18 +39,20 @@ RELEASE_OBJS := $(addprefix $(RELEASE_DIR)/, $(OBJS))
debug: $(DEBUG_TARGET)
$(DEBUG_TARGET): $(DEBUG_OBJS)
+ @mkdir -p $(dir $@)
$(CC) $^ -o $@ $(LDFLAGS)
-$(DEBUG_DIR)/%.o: %.c
+$(DEBUG_DIR)$(OBJ_DIR)%.o: %.c
@mkdir -p $(dir $@)
$(CC) $(CC_FLAGS) $(DEBUG_CFLAGS) -c $< -o $@
release: $(RELEASE_TARGET)
$(RELEASE_TARGET): $(RELEASE_OBJS)
+ @mkdir -p $(dir $@)
$(CC) $^ -o $@ $(LDFLAGS)
-$(RELEASE_DIR)/%.o: %.c
+$(RELEASE_DIR)$(OBJ_DIR)%.o: %.c
@mkdir -p $(dir $@)
$(CC) $(CC_FLAGS) $(RELEASE_CFLAGS) -c $< -o $@
diff --git a/README.md b/README.md
index 6e34f3e..b2684b9 100644
--- a/README.md
+++ b/README.md
@@ -3,9 +3,9 @@
-**Pocketlang** is a small (~3000 semicolons) and [fast](https://github.com/ThakeeNathees/pocketlang#performance)
-functional language written in C. It's syntactically similar to Ruby and it can
-be learned [within 15 minutes](https://thakeenathees.github.io/pocketlang/docs/v0.1.0/Reference/Cheat-Sheet.html).
+**Pocketlang** is a lightweight (~3000 semicolons) and [fast](https://github.com/ThakeeNathees/pocketlang#performance)
+object oriented, embeddable scripting language written in C. It has a ruby
+flavoured python syntax, that can be learned [within 15 minutes](https://thakeenathees.github.io/pocketlang/docs/v0.1.0/Reference/Cheat-Sheet.html).
Including the compiler, bytecode VM and runtime, it's a standalone executable
with zero external dependencies just as it's self descriptive name. The pocketlang
VM can be embedded in another hosting program very easily.
@@ -85,7 +85,7 @@ from [msys2](https://www.msys2.org/) or [cygwin](https://www.cygwin.com/).
#### Windows batch script
```
-build
+scripts\build.bat
```
You don't have to run the script from a Visual Studio .NET developer command prompt, It'll search
for the MSVS installation path and setup the build environment.
@@ -98,7 +98,10 @@ for the MSVS installation path and setup the build environment.
4. Add `src/include` to include path.
5. Compile.
-If you weren't able to compile it, please report us by [opening an issue](https://github.com/ThakeeNathees/pocketlang/issues/new).
+Visual studio project files can be generated with the premake, see
+[scripts/README](https://github.com/ThakeeNathees/pocketlang/scripts/README.md)
+for more information. If you weren't able to compile it, please report
+us by [opening an issue](https://github.com/ThakeeNathees/pocketlang/issues/new).
## References
diff --git a/cli/internal.h b/cli/internal.h
index 2cce2a9..42ebcdb 100644
--- a/cli/internal.h
+++ b/cli/internal.h
@@ -30,7 +30,7 @@
#define CLI_NOTICE \
"PocketLang " PK_VERSION_STRING " (https://github.com/ThakeeNathees/pocketlang/)\n" \
- "Copyright (c) 2020 - 2021 ThakeeNathees\n" \
+ "Copyright (c) 2020-2021 ThakeeNathees\n" \
"Copyright (c) 2021-2022 Pocketlang Contributors\n" \
"Free and open source software under the terms of the MIT license.\n"
diff --git a/scripts/README.md b/scripts/README.md
new file mode 100644
index 0000000..f909e84
--- /dev/null
+++ b/scripts/README.md
@@ -0,0 +1,41 @@
+
+This directory contains all the scripts that were used to build, test, measure
+performance etc. pocketlang. These scripts in this directory are path
+independent -- can be run from anywhere.
+
+## Using premake
+
+To download the premake **which is only 1.3 MB** stand alone binary, run the
+bellow command (on windows it might be `python` and not `python3`) or you
+can download it your self at https://premake.github.io/download.
+
+```
+python3 download_premake.py
+```
+
+It will download and place the `premake.exe` (in windows) binary next to
+it, next run the following command to generate Visual studio solution files.
+
+```
+premake5 vs2019
+```
+
+for other project files and information see: https://premake.github.io/docs/
+
+## Running Benchmarks
+
+Build a release version of the pocketlang (using make file or the build.bat
+script) and run the following command to run benchmarks. It'll generate a
+benchmark report named `report.html` in this directory.
+
+```
+python3 run_benchmarks.py
+```
+
+## Other Scripts
+
+`generate_native.py` - will generate the native interface (C extension
+for pocketlang) source files from the `pocketlang.h` header. Rest of
+the scripts name speak for it self. If you want to add a build script
+or found a bug, feel free to open an issue or a PR.
+
\ No newline at end of file
diff --git a/build.bat b/scripts/build.bat
similarity index 80%
rename from build.bat
rename to scripts/build.bat
index ec233e6..8c1fbda 100644
--- a/build.bat
+++ b/scripts/build.bat
@@ -3,7 +3,11 @@
:: Distributed Under The MIT License
@echo off
-Pushd "%~dp0"
+Pushd %cd%
+cd %~dp0
+
+:: Root directory of the project
+set pocket_root=%~dp0..\
:: ----------------------------------------------------------------------------
:: PARSE COMMAND LINE ARGS
@@ -90,7 +94,7 @@ set addnl_linkflags=/SUBSYSTEM:CONSOLE
set addnl_cdefines=/D_CRT_SECURE_NO_WARNINGS
:: Relative root dir from a single intermediate dir.
-set root_dir=..\..\..\
+
if "%debug_build%"=="false" (
@@ -100,11 +104,11 @@ if "%debug_build%"=="false" (
exit /b 1
set cflags=%cflags% -O2 -MD
- set target_dir=build\release\
+ set target_dir=%pocket_root%build\Release\
) else (
set cflags=%cflags% -MDd -ZI
set addnl_cdefines=%addnl_cdefines% /DDEBUG
- set target_dir=build\debug\
+ set target_dir=%pocket_root%build\Debug\
)
if "%shared_lib%"=="true" (
@@ -112,43 +116,48 @@ if "%shared_lib%"=="true" (
)
:: Make intermediate folders.
-if not exist %target_dir%src\ md %target_dir%src\
-if not exist %target_dir%cli\ md %target_dir%cli\
-if not exist %target_dir%bin\ md %target_dir%bin\
+if not exist %target_dir%bin\ mkdir %target_dir%bin\
+if not exist %target_dir%lib\ mkdir %target_dir%lib\
+if not exist %target_dir%obj\pocket mkdir %target_dir%obj\pocket\
+if not exist %target_dir%obj\cli\ mkdir %target_dir%obj\cli\
:: ----------------------------------------------------------------------------
:: COMPILE
:: ----------------------------------------------------------------------------
:COMPILE
-:: Go inside src\ build all src files.
-cd %target_dir%src\
-cl /nologo /c %addnl_cdefines% %addnl_cflags% %root_dir%src\*.c
+cd %target_dir%obj\pocket
+
+cl /nologo /c %addnl_cdefines% %addnl_cflags% %pocket_root%src\*.c
if errorlevel 1 goto :FAIL
:: If compiling shared lib, jump pass the lib/cli binaries.
if "%shared_lib%"=="true" (
- set pklib=..\bin\pocket-dll.lib
+ set pklib=%target_dir%bin\pocket.lib
) else (
- set pklib=..\bin\pocket.lib
+ set pklib=%target_dir%lib\pocket.lib
)
:: If compiling shared lib, jump pass the lib/cli binaries.
if "%shared_lib%"=="true" goto :SHARED
lib /nologo %addnl_linkflags% /OUT:%pklib% *.obj
goto :SRC_END
+
:SHARED
-link /nologo /dll /out:..\bin\pocket.dll /implib:%pklib% *.obj
+link /nologo /dll /out:%target_dir%bin\pocket.dll /implib:%pklib% *.obj
+
:SRC_END
if errorlevel 1 goto :FAIL
-:: Go inside cli\ from src\ build all cli files.
-cd ..\cli\
-cl /nologo /c %addnl_cdefines% %addnl_cflags% /I%root_dir%src\include\ %root_dir%cli\*.c
+cd %target_dir%obj\cli
+
+cl /nologo /c %addnl_cdefines% %addnl_cflags% /I%pocket_root%src\include\ %pocket_root%cli\*.c
if errorlevel 1 goto :FAIL
+cd %target_dir%bin\
+
:: Compile the cli executable.
-cl /nologo %addnl_cdefines% *.obj %pklib% /Fe..\bin\pocket.exe
+cl /nologo %addnl_cdefines% %target_dir%obj\cli\*.obj %pklib% /Fe%target_dir%bin\pocket.exe
if errorlevel 1 goto :FAIL
:: Navigate to the build directory.
@@ -162,8 +171,8 @@ goto :SUCCESS
:CLEAN
-if exist "build/debug" rmdir /S /Q "build/debug"
-if exist "build/release" rmdir /S /Q "build/release"
+if exist "%pocket_root%build/Debug" rmdir /S /Q "%pocket_root%build/Debug"
+if exist "%pocket_root%build/Release" rmdir /S /Q "%pocket_root%build/Release"
echo.
echo Files were cleaned.
@@ -179,9 +188,10 @@ echo Compilation Success
goto :END
:FAIL
+popd
+endlocal
echo Build failed. See the error messages.
exit /b 1
-goto :END
:END
popd
diff --git a/scripts/download_premake.py b/scripts/download_premake.py
new file mode 100644
index 0000000..7ac29ef
--- /dev/null
+++ b/scripts/download_premake.py
@@ -0,0 +1,48 @@
+##
+## Copyright (c) 2020-2022 Thakee Nathees
+## Copyright (c) 2021-2022 Pocketlang Contributors
+## Distributed Under The MIT License
+##
+
+## A tiny script to download and place premake binary in this path.
+## Primarly used to generate Visual Studio project files. Feel free
+## add other build script and platforms.
+
+import urllib.request
+import os, platform
+import tempfile, zipfile, tarfile
+from os.path import abspath, dirname, join
+
+THIS_PATH = abspath(dirname(__file__))
+
+PREMAKE_PLATFORM_URL = {
+ "Windows": "https://github.com/premake/premake-core/releases/download/v5.0.0-beta1/premake-5.0.0-beta1-windows.zip",
+ #"Linux": TODO,
+ #"Darwin": TODO,
+}
+
+def main():
+ system = platform.system()
+ if system not in PREMAKE_PLATFORM_URL:
+ error_exit(f"Platform {system} is currently not supported.\n" +\
+ "(You can modify this script to add your platform and contribute).")
+
+ premake_url = PREMAKE_PLATFORM_URL[system]
+ tmpdir = tempfile.mkdtemp()
+ zip_path = join(tmpdir, 'premake5.zip')
+
+ with urllib.request.urlopen(premake_url) as binary_zip:
+ with open(zip_path, 'wb') as f:
+ f.write(binary_zip.read())
+ premake_zip = zipfile.ZipFile(zip_path, 'r')
+ premake_zip.extractall(THIS_PATH)
+
+ print("premake5 downloaded successfully.")
+
+## prints an error message to stderr and exit immediately.
+def error_exit(msg):
+ print("Error:", msg, file=sys.stderr)
+ sys.exit(1)
+
+if __name__ == "__main__":
+ main()
diff --git a/cli/native.py b/scripts/generate_native.py
similarity index 97%
rename from cli/native.py
rename to scripts/generate_native.py
index cb4631a..cf2c1f3 100644
--- a/cli/native.py
+++ b/scripts/generate_native.py
@@ -3,6 +3,9 @@
## Copyright (c) 2021-2022 Pocketlang Contributors
## Distributed Under The MIT License
+raise Exception("The paths of the files should be fixed "
+ "after this script is moved to scripts/ directory.")
+
import re, os
from os.path import (join, exists, abspath,
relpath, dirname)
diff --git a/scripts/premake5.lua b/scripts/premake5.lua
new file mode 100644
index 0000000..d778f07
--- /dev/null
+++ b/scripts/premake5.lua
@@ -0,0 +1,80 @@
+--
+-- Copyright (c) 2020-2022 Thakee Nathees
+-- Copyright (c) 2021-2022 Pocketlang Contributors
+-- Distributed Under The MIT License
+--
+
+-- Requires premake5.0.0-alpha-12 or greater.
+
+local build_dir = "../build/"
+local src_dir = "../src/"
+local cli_dir = "../cli/"
+
+workspace "pocketlang"
+ location (build_dir)
+ configurations { "Debug", "Release" }
+ platforms { "x86", "x64" }
+ filter "platforms:x86"
+ architecture "x86"
+ filter "platforms:x64"
+ architecture "x64"
+
+-- Reusable project configurations.
+function proj_commons(target_dir)
+ language "C"
+ cdialect "C99"
+ objdir (build_dir .. "%{cfg.buildcfg}/obj/")
+ targetdir (build_dir .. "%{cfg.buildcfg}/" .. target_dir)
+
+ filter "configurations:Debug"
+ defines { "DEBUG" }
+ symbols "On"
+ filter "configurations:Release"
+ defines { "NDEBUG" }
+ optimize "On"
+
+ filter "system:Windows"
+ staticruntime "On"
+ systemversion "latest"
+ postbuildcommands ""
+ defines { "_CRT_SECURE_NO_WARNINGS" }
+
+ filter {}
+end
+
+-- pocketlang sources as static library.
+project "pocket_static"
+ kind "StaticLib"
+ targetname "pocket"
+ proj_commons("lib/")
+ files { src_dir .. "*.c",
+ src_dir .. "**.h"}
+
+-- pocketlang sources as shared library.
+project "pocket_shared"
+ kind "SharedLib"
+ targetname "pocket"
+ proj_commons("bin/")
+ files { src_dir .. "*.c",
+ src_dir .. "**.h"}
+ defines { "PK_DLL", "PK_COMPILE" }
+
+-- command line executable.
+project "pocket_cli"
+ kind "ConsoleApp"
+ targetname "pocket"
+ proj_commons("bin/")
+ files { cli_dir .. "*.c",
+ cli_dir .. "**.h" }
+ includedirs ({ src_dir .. "include/" })
+ links { "pocket_static" }
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/benchmarks/benchmarks.py b/scripts/run_benchmarks.py
similarity index 82%
rename from tests/benchmarks/benchmarks.py
rename to scripts/run_benchmarks.py
index 764b2a0..3f8ade3 100644
--- a/tests/benchmarks/benchmarks.py
+++ b/scripts/run_benchmarks.py
@@ -8,11 +8,17 @@ import subprocess, platform
from shutil import which
from os.path import join, abspath, dirname, relpath, exists
-## The absolute path of this file, when run as a script.
-## This file is not intended to be included in other files at the moment.
+## Absolute path of this file's directory.
THIS_PATH = abspath(dirname(__file__))
-## A list of benchmark directories, relative to THIS_PATH
+## Output debug cli executable's directory.
+POCKET_BINARY_DIR = abspath(join(THIS_PATH, "../build/Release/bin/"))
+
+## Pocket lang root directory. All the listed paths bellow are relative to
+## the BENCHMARKS_DIR.
+BENCHMARKS_DIR = abspath(join(THIS_PATH, "../tests/benchmarks"))
+
+## A list of benchmark directories, relative to BENCHMARKS_DIR
BENCHMARKS = (
"factors",
"fib",
@@ -34,23 +40,6 @@ INTERPRETERS = {
#'javascript' : ('node', '.js'),
}
-## Map from systems to the relative pocket binary path.
-SYSTEM_TO_POCKET_PATH = {
- "current" : {
- "Windows": "..\\..\\build\\release\\bin\\pocket.exe",
- "Linux" : "../../build/release/pocket",
- "Darwin" : "../../build/release/pocket",
- },
-
- ## This maps the older version of pocket in the system path, to compare
- ## pocketlang with it's older version.
- "older" : {
- "Windows": "..\\..\\build\\release\\bin\\pocket_older.exe",
- "Linux" : "../../build/release/pocket_older",
- "Darwin" : "../../build/release/pocket_older",
- }
-}
-
## The html template to display the report.
HTML_TEMPLATE = "template.html"
@@ -63,7 +52,7 @@ def main():
print_title(benchmark.title())
for lang in INTERPRETERS:
interp, ext = INTERPRETERS[lang]
- source = abspath(join(THIS_PATH, benchmark, benchmark + ext))
+ source = abspath(join(BENCHMARKS_DIR, benchmark, benchmark + ext))
if not exists(source): continue
print(" %-10s : "%lang, end=''); sys.stdout.flush()
result = subprocess.run([interp, source],
@@ -78,27 +67,32 @@ def main():
display_results(results)
+## This will return the path of the pocket binary (on different platforms).
+## The debug version of it for enabling the assertions.
+def get_pocket_binary(name, fail):
+ system = platform.system()
+ if system not in ("Windows", "Linux", "Darwin"):
+ error_exit("Unsupported platform")
+ binary = join(POCKET_BINARY_DIR, name)
+ if system == "Windows": binary += ".exe"
+ if not exists(binary):
+ if fail: error_exit(f"Pocket interpreter not found at: '{binary}'")
+ else: return None
+ return binary
+
## Set the pocketlang path for the current system to the compiled output.
def update_interpreters():
- system = platform.system()
- if system not in SYSTEM_TO_POCKET_PATH['current']:
- print("Unsupported platform %s" % system)
- sys.exit(1)
+ pocket = get_pocket_binary("pocket", True)
+ pocket_older = get_pocket_binary("pocket_older", False)
global INTERPRETERS
- pocket = abspath(join(THIS_PATH, SYSTEM_TO_POCKET_PATH['current'][system]))
- pocket_older = abspath(join(THIS_PATH, SYSTEM_TO_POCKET_PATH['older'][system]))
- if not exists(pocket):
- print(f"{colmsg('Error', COL_RED)}: " +
- "Pocket interpreter not found at: '%s'" % pocket)
- sys.exit(1)
INTERPRETERS['pocketlang'] = (pocket, '.pk')
## Add if older version of pocketlang if exists.
- if exists(pocket_older):
+ if pocket_older is not None:
INTERPRETERS['pk-older'] = (pocket_older, '.pk')
- if 'python' in INTERPRETERS and system == "Windows":
+ if 'python' in INTERPRETERS and platform.system() == "Windows":
INTERPRETERS['python'] = ('python', '.py')
missing = []
@@ -241,6 +235,11 @@ def print_title(title):
print(" %s " % title)
_print_sep()
+## prints an error message to stderr and exit immediately.
+def error_exit(msg):
+ print("Error:", msg, file=sys.stderr)
+ sys.exit(1)
+
## Simple color logger --------------------------------------------------------
## https://stackoverflow.com/a/70599663/10846399
diff --git a/tests/tests.py b/scripts/run_tests.py
similarity index 79%
rename from tests/tests.py
rename to scripts/run_tests.py
index 1aa5160..02eea24 100644
--- a/tests/tests.py
+++ b/scripts/run_tests.py
@@ -5,15 +5,18 @@
import os, sys, platform
import subprocess, json, re
-from os.path import join, abspath, dirname, relpath
+from os.path import (join, abspath, dirname,
+ relpath, exists)
## TODO: Re-write this in doctest (https://github.com/onqtam/doctest)
-## The absolute path of this file, when run as a script.
-## This file is not intended to be included in other files at the moment.
-THIS_PATH = abspath(dirname(__file__))
+## Pocket lang root directory.
+ROOT_PATH = abspath(join(dirname(__file__), ".."))
-## All the test files.
+## Output debug cli executable path relative to root.
+POCKET_BINARY = "build/Debug/bin/pocket"
+
+## All the test files, relative to root/tests/ directory.
TEST_SUITE = {
"Unit Tests": (
"lang/basics.pk",
@@ -49,13 +52,6 @@ TEST_SUITE = {
),
}
-## Map from systems to the relative binary path
-SYSTEM_TO_BINARY_PATH = {
- "Windows": "..\\build\\debug\\bin\\pocket.exe",
- "Linux": "../build/debug/pocket",
- "Darwin": "../build/debug/pocket",
-}
-
## This global variable will be set to true if any test failed.
tests_failed = False
@@ -71,7 +67,7 @@ def run_all_tests():
for suite in TEST_SUITE:
print_title(suite)
for test in TEST_SUITE[suite]:
- path = join(THIS_PATH, test)
+ path = join(ROOT_PATH, "tests", test)
run_test_file(pocket, test, path)
def run_test_file(pocket, test, path):
@@ -94,14 +90,13 @@ def run_test_file(pocket, test, path):
## The debug version of it for enabling the assertions.
def get_pocket_binary():
system = platform.system()
- if system not in SYSTEM_TO_BINARY_PATH:
- error_exit("Unsupported platform %s" % system)
-
- pocket = abspath(join(THIS_PATH, SYSTEM_TO_BINARY_PATH[system]))
- if not os.path.exists(pocket):
- error_exit("Pocket interpreter not found at: '%s'" % pocket)
-
- return pocket
+ if system not in ("Windows", "Linux", "Darwin"):
+ error_exit("Unsupported platform")
+ binary = join(ROOT_PATH, POCKET_BINARY)
+ if system == "Windows": binary += ".exe"
+ if not exists(binary):
+ error_exit(f"Pocket interpreter not found at: '{binary}'")
+ return binary
def run_command(command):
return subprocess.run(command,
@@ -136,8 +131,7 @@ def print_success(msg):
for line in msg.splitlines():
print(COLORS['GREEN'] + line + COLORS['END'])
-## prints an error message to stderr and exit
-## immediately.
+## prints an error message to stderr and exit immediately.
def error_exit(msg):
print("Error:", msg, file=sys.stderr)
sys.exit(1)
diff --git a/tests/check.py b/scripts/static_check.py
similarity index 90%
rename from tests/check.py
rename to scripts/static_check.py
index 0fb8ef1..d4f3f84 100644
--- a/tests/check.py
+++ b/scripts/static_check.py
@@ -10,15 +10,15 @@ import os, sys, re
from os import listdir
from os.path import join, abspath, dirname, relpath, normpath
-## The absolute path of this file, when run as a script.
-## This file is not intended to be included in other files at the moment.
-THIS_PATH = abspath(dirname(__file__))
+## Pocket lang root directory. All the listed paths bellow are relative to
+## the root path.
+ROOT_PATH = abspath(join(dirname(__file__), ".."))
## A list of source files, to check if the fnv1a hash values match it's
## corresponding cstring in the CASE_ATTRIB(name, hash) macro calls.
HASH_CHECK_LIST = [
- "../src/pk_core.c",
- "../src/pk_value.c",
+ "src/pk_core.c",
+ "src/pk_value.c",
]
## A list of extension to perform static checks, of all the files in the
@@ -31,19 +31,19 @@ ALLOW_LONG_LINES = ('http://', 'https://', '