diff options
-rw-r--r-- | flake.nix | 140 | ||||
-rw-r--r-- | meson.build | 9 | ||||
-rw-r--r-- | meson_options.txt | 1 | ||||
-rw-r--r-- | pyproject.toml | 10 | ||||
-rw-r--r-- | python-package.nix | 41 | ||||
-rw-r--r-- | src/evanix-py.c | 14 |
6 files changed, 157 insertions, 58 deletions
@@ -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); +} |