Skip to content

Commit 60bffbd

Browse files
committed
nix-fetchers-c: Init with settings object
Also make it a dependency of nix-flake-c; we'll need that.
1 parent 1061a09 commit 60bffbd

17 files changed

+213
-0
lines changed

flake.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,7 @@
361361
"nix-store-tests" = { };
362362

363363
"nix-fetchers" = { };
364+
"nix-fetchers-c" = { };
364365
"nix-fetchers-tests" = { };
365366

366367
"nix-expr" = { };

meson.build

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ endif
3333
# External C wrapper libraries
3434
subproject('libutil-c')
3535
subproject('libstore-c')
36+
subproject('libfetchers-c')
3637
subproject('libexpr-c')
3738
subproject('libflake-c')
3839
subproject('libmain-c')

packaging/components.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ in
333333
nix-store-tests = callPackage ../src/libstore-tests/package.nix { };
334334

335335
nix-fetchers = callPackage ../src/libfetchers/package.nix { };
336+
nix-fetchers-c = callPackage ../src/libfetchers-c/package.nix { };
336337
nix-fetchers-tests = callPackage ../src/libfetchers-tests/package.nix { };
337338

338339
nix-expr = callPackage ../src/libexpr/package.nix { };

packaging/everything.nix

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
nix-store-tests,
1616

1717
nix-fetchers,
18+
nix-fetchers-c,
1819
nix-fetchers-tests,
1920

2021
nix-expr,
@@ -54,6 +55,7 @@ let
5455
nix-store
5556
nix-store-c
5657
nix-fetchers
58+
nix-fetchers-c
5759
nix-expr
5860
nix-expr-c
5961
nix-flake
@@ -230,6 +232,7 @@ stdenv.mkDerivation (finalAttrs: {
230232
"nix-expr"
231233
"nix-expr-c"
232234
"nix-fetchers"
235+
"nix-fetchers-c"
233236
"nix-flake"
234237
"nix-flake-c"
235238
"nix-main"

packaging/hydra.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ let
4848
"nix-store-test-support"
4949
"nix-store-tests"
5050
"nix-fetchers"
51+
"nix-fetchers-c"
5152
"nix-fetchers-tests"
5253
"nix-expr"
5354
"nix-expr-c"

src/libfetchers-c/.version

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../.version

src/libfetchers-c/meson.build

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
project('nix-fetchers-c', 'cpp',
2+
version : files('.version'),
3+
default_options : [
4+
'cpp_std=c++2a',
5+
# TODO(Qyriad): increase the warning level
6+
'warning_level=1',
7+
'errorlogs=true', # Please print logs for tests that fail
8+
],
9+
meson_version : '>= 1.1',
10+
license : 'LGPL-2.1-or-later',
11+
)
12+
13+
cxx = meson.get_compiler('cpp')
14+
15+
subdir('nix-meson-build-support/deps-lists')
16+
17+
deps_private_maybe_subproject = [
18+
dependency('nix-util'),
19+
dependency('nix-store'),
20+
dependency('nix-fetchers'),
21+
]
22+
deps_public_maybe_subproject = [
23+
dependency('nix-util-c'),
24+
dependency('nix-store-c'),
25+
]
26+
subdir('nix-meson-build-support/subprojects')
27+
28+
add_project_arguments(
29+
language : 'cpp',
30+
)
31+
32+
subdir('nix-meson-build-support/common')
33+
34+
sources = files(
35+
'nix_api_fetchers.cc',
36+
)
37+
38+
include_dirs = [include_directories('.')]
39+
40+
headers = files(
41+
'nix_api_fetchers.h',
42+
'nix_api_fetchers_internal.hh',
43+
)
44+
45+
# TODO move this header to libexpr, maybe don't use it in tests?
46+
headers += files('nix_api_fetchers.h')
47+
48+
subdir('nix-meson-build-support/export-all-symbols')
49+
subdir('nix-meson-build-support/windows-version')
50+
51+
this_library = library(
52+
'nixfetchersc',
53+
sources,
54+
dependencies : deps_public + deps_private + deps_other,
55+
include_directories : include_dirs,
56+
link_args: linker_export_flags,
57+
prelink : true, # For C++ static initializers
58+
install : true,
59+
)
60+
61+
install_headers(headers, preserve_path : true)
62+
63+
libraries_private = []
64+
65+
subdir('nix-meson-build-support/export')
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../nix-meson-build-support

src/libfetchers-c/nix_api_fetchers.cc

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#include "nix_api_fetchers.h"
2+
#include "nix_api_fetchers_internal.hh"
3+
#include "nix_api_util_internal.h"
4+
5+
nix_fetchers_settings * nix_fetchers_settings_new(nix_c_context * context)
6+
{
7+
try {
8+
auto fetchersSettings = nix::make_ref<nix::fetchers::Settings>(nix::fetchers::Settings{});
9+
return new nix_fetchers_settings{
10+
.settings = fetchersSettings,
11+
};
12+
}
13+
NIXC_CATCH_ERRS_NULL
14+
}
15+
16+
void nix_fetchers_settings_free(nix_fetchers_settings * settings)
17+
{
18+
delete settings;
19+
}

src/libfetchers-c/nix_api_fetchers.h

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#ifndef NIX_API_FETCHERS_H
2+
#define NIX_API_FETCHERS_H
3+
/** @defgroup libfetchers libfetchers
4+
* @brief Bindings to the Nix fetchers library
5+
* @{
6+
*/
7+
/** @file
8+
* @brief Main entry for the libfetchers C bindings
9+
*/
10+
11+
#include "nix_api_util.h"
12+
13+
#ifdef __cplusplus
14+
extern "C" {
15+
#endif
16+
// cffi start
17+
18+
// Type definitions
19+
/**
20+
* @brief Shared settings object
21+
*/
22+
typedef struct nix_fetchers_settings nix_fetchers_settings;
23+
24+
nix_fetchers_settings * nix_fetchers_settings_new(nix_c_context * context);
25+
26+
void nix_fetchers_settings_free(nix_fetchers_settings * settings);
27+
28+
#ifdef __cplusplus
29+
} // extern "C"
30+
#endif
31+
32+
#endif // NIX_API_FETCHERS_H

0 commit comments

Comments
 (0)