summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flake.nix140
-rw-r--r--meson.build9
-rw-r--r--meson_options.txt1
-rw-r--r--pyproject.toml10
-rw-r--r--python-package.nix41
-rw-r--r--src/evanix-py.c14
6 files changed, 157 insertions, 58 deletions
diff --git a/flake.nix b/flake.nix
index 90992f3..ad6638d 100644
--- a/flake.nix
+++ b/flake.nix
@@ -3,75 +3,99 @@
inputs.nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
- outputs = { self, nixpkgs }: let
- lib = nixpkgs.lib;
+ outputs =
+ { self, nixpkgs }:
+ let
+ lib = nixpkgs.lib;
- forSystem = f: system: f {
- inherit system;
- pkgs = import nixpkgs { inherit system; };
- };
+ forSystem =
+ f: system:
+ f {
+ inherit system;
+ pkgs = import nixpkgs { inherit system; };
+ };
- supportedSystems = lib.platforms.unix;
- forAllSystems = f: lib.genAttrs supportedSystems (forSystem f);
- in {
- devShells = forAllSystems ({ system, pkgs }: {
- default = pkgs.mkShell {
- name = "dev";
+ supportedSystems = lib.platforms.unix;
+ forAllSystems = f: lib.genAttrs supportedSystems (forSystem f);
+ in
+ {
+ devShells = forAllSystems (
+ { system, pkgs }:
+ {
+ default = pkgs.mkShell {
+ name = "dev";
- buildInputs = with pkgs; [
- jq
- cjson
- nix-eval-jobs
+ buildInputs = with pkgs; [
+ jq
+ cjson
+ nix-eval-jobs
- pkg-config
- meson
- ninja
+ pkg-config
+ meson
+ ninja
- gdb
- ccls
- valgrind
- clang-tools # clang-format
- ];
+ gdb
+ ccls
+ valgrind
+ clang-tools # clang-format
+ ];
- shellHook = ''
- export PS1="\033[0;34m[󱄅 ]\033[0m $PS1"
- '';
- };
- });
+ shellHook = ''
+ export PS1="\033[0;34m[󱄅 ]\033[0m $PS1"
+ '';
+ };
+ }
+ );
- packages = forAllSystems ({ system, pkgs }: {
- evanix = pkgs.stdenv.mkDerivation (finalAttrs: {
- name = "evanix";
+ packages = forAllSystems (
+ { system, pkgs }:
+ {
+ default = self.packages.${system}.evanix;
+ evanix = pkgs.stdenv.mkDerivation (finalAttrs: {
+ name = "evanix";
- src = ./.;
- nativeBuildInputs = with pkgs; [
- meson
- ninja
- pkg-config
- makeWrapper
- ];
- buildInputs = with pkgs; [
- cjson
- nix-eval-jobs
- ];
+ src = ./.;
+ nativeBuildInputs = with pkgs; [
+ meson
+ ninja
+ pkg-config
+ makeWrapper
+ ];
+ buildInputs = with pkgs; [
+ cjson
+ nix-eval-jobs
+ ];
- postInstall = ''
- wrapProgram $out/bin/evanix \
- --prefix PATH : ${lib.makeBinPath [ pkgs.nix-eval-jobs ]}
- '';
+ postInstall = ''
+ wrapProgram $out/bin/evanix \
+ --prefix PATH : ${lib.makeBinPath [ pkgs.nix-eval-jobs ]}
+ '';
- meta = {
- homepage = "https://git.sinanmohd.com/evanix";
+ meta = {
+ homepage = "https://git.sinanmohd.com/evanix";
- license = lib.licenses.gpl3;
- platforms = supportedSystems;
- mainProgram = "evanix";
+ license = lib.licenses.gpl3;
+ platforms = supportedSystems;
+ mainProgram = "evanix";
- maintainers = with lib.maintainers; [ sinanmohd ];
- };
- });
+ maintainers = with lib.maintainers; [ sinanmohd ];
+ };
+ });
- default = self.packages.${system}.evanix;
- });
- };
+ evanix-py = pkgs.python3Packages.callPackage ./python-package.nix { };
+ pythonWithEvanix =
+ let
+ wrapper = pkgs.python3.withPackages (ps: [ (ps.callPackage ./python-package.nix { }) ]);
+ in
+ wrapper.overrideAttrs (oldAttrs: {
+ makeWrapperArgs = oldAttrs.makeWrapperArgs or [ ] ++ [
+ "--prefix"
+ "PATH"
+ ":"
+ "${lib.makeBinPath [ pkgs.nix-eval-jobs ]}"
+ ];
+ });
+ }
+ );
+ };
}
diff --git a/meson.build b/meson.build
index 38f78d7..e5290f8 100644
--- a/meson.build
+++ b/meson.build
@@ -21,4 +21,13 @@ add_project_arguments(
cjson_dep = dependency('libcjson')
evanix_inc = include_directories('include')
+if get_option('build-python')
+ py = import('python').find_installation()
+ py.extension_module(
+ 'evanix',
+ 'src/evanix-py.c',
+ install: true,
+ )
+endif
+
subdir('src')
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..e8baf64
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1 @@
+option('build-python', type: 'boolean', value: 'false')
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..b5a3375
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,10 @@
+[build-system]
+build-backend = 'mesonpy'
+requires = [ 'meson-python' ]
+
+[project]
+name = 'evanix'
+version = '0.0.1'
+
+[tool.meson-python.args]
+setup = [ '-Dbuild-python=true' ]
diff --git a/python-package.nix b/python-package.nix
new file mode 100644
index 0000000..a422052
--- /dev/null
+++ b/python-package.nix
@@ -0,0 +1,41 @@
+{
+ lib,
+ buildPythonPackage,
+ meson-python,
+ ninja,
+ pkg-config,
+ makeWrapper,
+ cjson,
+}:
+
+buildPythonPackage {
+ pname = "evanix";
+ version = "0.0.1";
+ pyproject = true;
+
+ src =
+ let
+ fs = lib.fileset;
+ in
+ fs.toSource {
+ root = ./.;
+ fileset = fs.unions [
+ ./src
+ ./include
+ ./meson.build
+ ./meson_options.txt
+ ./pyproject.toml
+ ];
+ };
+
+ build-system = [ meson-python ];
+ nativeBuildInputs = [
+ ninja
+ pkg-config
+ makeWrapper
+ ];
+ buildInputs = [
+ cjson
+ # nix-eval-jobs
+ ];
+}
diff --git a/src/evanix-py.c b/src/evanix-py.c
new file mode 100644
index 0000000..c010e27
--- /dev/null
+++ b/src/evanix-py.c
@@ -0,0 +1,14 @@
+#include <Python.h>
+
+static PyMethodDef methods[] = {
+ {NULL, NULL, 0, NULL},
+};
+
+static struct PyModuleDef module = {
+ PyModuleDef_HEAD_INIT, "evanix", NULL, -1, methods,
+};
+
+PyMODINIT_FUNC PyInit_evanix(void)
+{
+ return PyModule_Create(&module);
+}