diff --git a/.github/.keepalive b/.github/.keepalive
deleted file mode 100644
index 1e813ef..0000000
--- a/.github/.keepalive
+++ /dev/null
@@ -1 +0,0 @@
-2024-11-01T04:42:39.992Z
diff --git a/.github/workflows/test_published_package.yml b/.github/workflows/test_published_package.yml
new file mode 100644
index 0000000..5bbedb9
--- /dev/null
+++ b/.github/workflows/test_published_package.yml
@@ -0,0 +1,105 @@
+#/
+# @license Apache-2.0
+#
+# Copyright (c) 2024 The Stdlib Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#/
+
+# Workflow name:
+name: test_published_package
+
+# Workflow triggers:
+on:
+ # Run workflow on a weekly schedule:
+ schedule:
+ # * is a special character in YAML so you have to quote this string
+ - cron: '8 8 * * 6'
+
+ # Run workflow upon completion of `publish` workflow run:
+ workflow_run:
+ workflows: ["publish"]
+ types: [completed]
+
+ # Allow workflow to be manually run:
+ workflow_dispatch:
+
+# Workflow jobs:
+jobs:
+ test-published:
+ # Define a display name:
+ name: 'Test running examples of published package'
+
+ # Define the type of virtual host machine:
+ runs-on: ubuntu-latest
+
+ # Define environment variables:
+ env:
+ SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
+
+ # Run workflow job if `publish` workflow run is successful or when the workflow is manually run:
+ if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }}
+
+ # Define the job's steps:
+ steps:
+ # Checkout the repository:
+ - name: 'Checkout repository'
+ uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
+
+ # Install Node.js:
+ - name: 'Install Node.js'
+ uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1
+ with:
+ node-version: 20
+ timeout-minutes: 5
+
+ # Create test directory and run examples:
+ - name: 'Create test directory and run examples'
+ run: |
+ cd ..
+ mkdir test-published
+ cd test-published
+
+ # Copy example file:
+ cp $GITHUB_WORKSPACE/examples/index.js .
+
+ # Create a minimal package.json
+ echo '{
+ "name": "test-published",
+ "version": "1.0.0",
+ "main": "index.js",
+ "dependencies": {}
+ }' > package.json
+
+ # Get package name and modify example file:
+ PACKAGE_NAME=$(jq -r '.name' $GITHUB_WORKSPACE/package.json)
+ ESCAPED_PACKAGE_NAME=$(echo "$PACKAGE_NAME" | sed 's/[\/&]/\\&/g')
+
+ sed -i "s/require( '.\/..\/lib' )/require( '$ESCAPED_PACKAGE_NAME' )/g" index.js
+
+ # Extract and install dependencies:
+ DEPS=$(grep -oP "require\(\s*'([^']+)'\s*\)" index.js | sed "s/require(\s*'//" | sed "s/'\s*)//" | grep -v "^\.")
+ for dep in $DEPS; do
+ npm install $dep --save
+ done
+
+ # Run the example:
+ node index.js
+
+ # Send Slack notification if job fails:
+ - name: 'Send notification to Slack in case of failure'
+ uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 # v3.16.2
+ with:
+ status: ${{ job.status }}
+ channel: '#npm-ci'
+ if: failure()
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 38885ce..ca846b3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,40 @@
> Package changelog.
+
+
+## Unreleased (2024-11-24)
+
+
+
+### Commits
+
+
+
+- [`cdaf16f`](https://github.com/stdlib-js/stdlib/commit/cdaf16f9f3c05f153fcffbb00dab12412196cce6) - **chore:** update to modern benchmark Makefile _(by Philipp Burckhardt)_
+
+
+
+
+
+
+
+
+
+### Contributors
+
+A total of 1 person contributed to this release. Thank you to this contributor:
+
+- Philipp Burckhardt
+
+
+
+
+
+
+
+
+
## 0.2.3 (2024-07-28)
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index c9f811c..50a3cad 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -59,6 +59,7 @@ Mohammad Kaif <98884589+Kaif987@users.noreply.github.com>
Momtchil Momtchev
Muhammad Haris
Naresh Jagadeesan
+Neeraj Pathak
NightKnight
Nithin Katta <88046362+nithinkatta@users.noreply.github.com>
Nourhan Hasan <109472010+TheNourhan@users.noreply.github.com>
@@ -69,6 +70,7 @@ Prajwal Kulkarni
Pranav Goswami
Praneki <97080887+PraneGIT@users.noreply.github.com>
Pratik <97464067+Pratik772846@users.noreply.github.com>
+Pratyush Kumar Chouhan
Priyansh <88396544+itsspriyansh@users.noreply.github.com>
Pushpendra Chandravanshi
RISHAV <115060907+rishav2404@users.noreply.github.com>
@@ -79,9 +81,12 @@ Ridam Garg <67867319+RidamGarg@users.noreply.github.com>
Robert Gislason
Roman Stetsyk <25715951+romanstetsyk@users.noreply.github.com>
Rutam <138517416+performant23@users.noreply.github.com>
+Ruthwik Chikoti <145591715+ruthwikchikoti@users.noreply.github.com>
Ryan Seal
+Rylan Yang <137365285+rylany27@users.noreply.github.com>
Sai Srikar Dumpeti <80447788+the-r3aper7@users.noreply.github.com>
SarthakPaandey <145528240+SarthakPaandey@users.noreply.github.com>
+Saurabh Singh
Seyyed Parsa Neshaei
Shashank Shekhar Singh
Shivam <11shivam00@gmail.com>
diff --git a/benchmark/c/Makefile b/benchmark/c/Makefile
index e4542b1..2aa4582 100644
--- a/benchmark/c/Makefile
+++ b/benchmark/c/Makefile
@@ -16,14 +16,15 @@
# limitations under the License.
#/
-
# VARIABLES #
ifndef VERBOSE
QUIET := @
+else
+ QUIET :=
endif
-# Determine the OS:
+# Determine the OS ([1][1], [2][2]).
#
# [1]: https://en.wikipedia.org/wiki/Uname#Examples
# [2]: http://stackoverflow.com/a/27776822/2225624
@@ -36,6 +37,10 @@ ifneq (, $(findstring MSYS,$(OS)))
else
ifneq (, $(findstring CYGWIN,$(OS)))
OS := WINNT
+else
+ifneq (, $(findstring Windows_NT,$(OS)))
+ OS := WINNT
+endif
endif
endif
endif
@@ -54,7 +59,7 @@ CFLAGS ?= \
-Wall \
-pedantic
-# Determine whether to generate [position independent code][1]:
+# Determine whether to generate position independent code ([1][1], [2][2]).
#
# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options
# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option
@@ -64,43 +69,77 @@ else
fPIC ?= -fPIC
endif
+# List of includes (e.g., `-I /foo/bar -I /beep/boop/include`):
+INCLUDE ?=
+
+# List of source files:
+SOURCE_FILES ?=
+
+# List of libraries (e.g., `-lopenblas -lpthread`):
+LIBRARIES ?=
+
+# List of library paths (e.g., `-L /foo/bar -L /beep/boop`):
+LIBPATH ?=
+
# List of C targets:
c_targets := benchmark.out
-# TARGETS #
+# RULES #
-# Default target.
+#/
+# Compiles source files.
#
-# This target is the default target.
-
+# @param {string} [C_COMPILER] - C compiler (e.g., `gcc`)
+# @param {string} [CFLAGS] - C compiler options
+# @param {(string|void)} [fPIC] - compiler flag determining whether to generate position independent code (e.g., `-fPIC`)
+# @param {string} [INCLUDE] - list of includes (e.g., `-I /foo/bar -I /beep/boop/include`)
+# @param {string} [SOURCE_FILES] - list of source files
+# @param {string} [LIBPATH] - list of library paths (e.g., `-L /foo/bar -L /beep/boop`)
+# @param {string} [LIBRARIES] - list of libraries (e.g., `-lopenblas -lpthread`)
+#
+# @example
+# make
+#
+# @example
+# make all
+#/
all: $(c_targets)
.PHONY: all
-
-# Compile C source.
+#/
+# Compiles C source files.
#
-# This target compiles C source files.
-
+# @private
+# @param {string} CC - C compiler (e.g., `gcc`)
+# @param {string} CFLAGS - C compiler options
+# @param {(string|void)} fPIC - compiler flag determining whether to generate position independent code (e.g., `-fPIC`)
+# @param {string} INCLUDE - list of includes (e.g., `-I /foo/bar`)
+# @param {string} SOURCE_FILES - list of source files
+# @param {string} LIBPATH - list of library paths (e.g., `-L /foo/bar`)
+# @param {string} LIBRARIES - list of libraries (e.g., `-lopenblas`)
+#/
$(c_targets): %.out: %.c
- $(QUIET) $(CC) $(CFLAGS) $(fPIC) -o $@ $< -lm
-
+ $(QUIET) $(CC) $(CFLAGS) $(fPIC) $(INCLUDE) -o $@ $(SOURCE_FILES) $< $(LIBPATH) -lm $(LIBRARIES)
-# Run a benchmark.
+#/
+# Runs compiled benchmarks.
#
-# This target runs a benchmark.
-
+# @example
+# make run
+#/
run: $(c_targets)
$(QUIET) ./$<
.PHONY: run
-
-# Perform clean-up.
+#/
+# Removes generated files.
#
-# This target removes generated files.
-
+# @example
+# make clean
+#/
clean:
$(QUIET) -rm -f *.o *.out