Skip to content

Commit 317adca

Browse files
committed
* Adds Buckaroo manifest
1 parent 5fe26f5 commit 317adca

7 files changed

+316
-0
lines changed

.buckconfig

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[project]
2+
ignore = .git
3+
4+
[parser]
5+
default_build_file_syntax = SKYLARK
6+
7+
[cxx]
8+
should_remap_host_platform = true

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,9 @@ VERSION_RELEASED
2929
Debug
3030
install_manifest.txt
3131
x64
32+
33+
.buckd
34+
buck-out
35+
buckaroo
36+
.buckconfig.local
37+
.buckconfig.d

BUCK

Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
load('//:subdir_glob.bzl', 'subdir_glob')
2+
3+
genrule(
4+
name = 'configure',
5+
out = 'out',
6+
srcs = glob([
7+
'VERSION_CURRENT',
8+
'COPYING',
9+
'*.txt',
10+
'src/**/*.txt',
11+
'src/**/*.in',
12+
'src/**/*.cmake',
13+
'src/**/*.json',
14+
'src/**/*.crt',
15+
'src/**/*.pem',
16+
'build/**/*',
17+
'generate_uninstall/**/*',
18+
'orchestration_configs/**/*',
19+
]),
20+
cmd = ' && '.join([
21+
'mkdir -p $OUT',
22+
'cd $OUT',
23+
'cmake $SRCDIR',
24+
]),
25+
cacheable = False,
26+
)
27+
28+
genrule(
29+
name = 'bson-version',
30+
out = 'bson-version.h',
31+
srcs = [
32+
'src/libbson/src/bson/bson-version.h.in',
33+
],
34+
cmd = ' && '.join([
35+
'cp $SRCS $OUT',
36+
'sed -i "s/@BSON_MAJOR_VERSION@/0/g" $OUT',
37+
'sed -i "s/@BSON_MINOR_VERSION@/0/g" $OUT',
38+
'sed -i "s/@BSON_MICRO_VERSION@/0/g" $OUT',
39+
'sed -i "s/@BSON_VERSION@/0.0.0/g" $OUT',
40+
'sed -i "s/@BSON_PRERELEASE_VERSION@//g" $OUT',
41+
]),
42+
)
43+
44+
genrule(
45+
name = 'bson-config',
46+
out = 'bson-config.h',
47+
srcs = [
48+
'src/libbson/src/bson/bson-config.h.in',
49+
],
50+
cmd = ' && '.join([
51+
'cp $SRCS $OUT',
52+
'sed -i "s/@BSON_OS@/1/g" $OUT',
53+
'sed -i "s/@BSON_BYTE_ORDER@/1234/g" $OUT',
54+
'sed -i "s/@BSON_HAVE_ATOMIC_32_ADD_AND_FETCH@/1/g" $OUT',
55+
'sed -i "s/@BSON_HAVE_ATOMIC_64_ADD_AND_FETCH@/1/g" $OUT',
56+
'sed -i "s/@BSON_HAVE_CLOCK_GETTIME@/1/g" $OUT',
57+
'sed -i "s/@BSON_HAVE_STRINGS_H@/1/g" $OUT',
58+
'sed -i "s/@BSON_HAVE_STRNLEN@/1/g" $OUT',
59+
'sed -i "s/@BSON_HAVE_SNPRINTF@/1/g" $OUT',
60+
'sed -i "s/@BSON_HAVE_GMTIME_R@/1/g" $OUT',
61+
'sed -i "s/@BSON_HAVE_REALLOCF@/0/g" $OUT',
62+
'sed -i "s/@BSON_HAVE_TIMESPEC@/1/g" $OUT',
63+
'sed -i "s/@BSON_EXTRA_ALIGN@/1/g" $OUT',
64+
'sed -i "s/@BSON_HAVE_SYSCALL_TID@/1/g" $OUT',
65+
'sed -i "s/@BSON_HAVE_RAND_R@/1/g" $OUT',
66+
'sed -i "s/@BSON_HAVE_STDBOOL_H@/1/g" $OUT',
67+
]),
68+
)
69+
70+
gcc_pp_flags = [
71+
'-DBSON_COMPILATION=1',
72+
'-DMONGOC_COMPILATION=1',
73+
]
74+
75+
cxx_library(
76+
name = 'bson',
77+
header_namespace = '',
78+
exported_headers = dict(
79+
subdir_glob([
80+
('src/common', '**/*.h'),
81+
('src/libbson/src', '**/*.h'),
82+
]).items() + [
83+
('bson/bson-version.h', ':bson-version'),
84+
('bson/bson-config.h', ':bson-config'),
85+
]
86+
),
87+
srcs = glob([
88+
'src/common/**/*.c',
89+
'src/libbson/src/**/*.c',
90+
]),
91+
platform_preprocessor_flags = [
92+
('^macos.*', gcc_pp_flags),
93+
('^linux.*', gcc_pp_flags),
94+
],
95+
visibility = [
96+
'PUBLIC',
97+
],
98+
)
99+
100+
genrule(
101+
name = 'mongoc-version',
102+
out = 'mongoc-version.h',
103+
srcs = [
104+
'src/libmongoc/src/mongoc/mongoc-version.h.in',
105+
],
106+
cmd = ' && '.join([
107+
'cp $SRCS $OUT',
108+
'sed -i "s/@MONGOC_MAJOR_VERSION@/0/g" $OUT',
109+
'sed -i "s/@MONGOC_MINOR_VERSION@/0/g" $OUT',
110+
'sed -i "s/@MONGOC_MICRO_VERSION@/0/g" $OUT',
111+
]),
112+
)
113+
114+
genrule(
115+
name = 'mongoc-config',
116+
out = 'mongoc-config.h',
117+
srcs = [
118+
'src/libmongoc/src/mongoc/mongoc-config.h.in',
119+
],
120+
cmd = ' && '.join([
121+
'cp $SRCS $OUT',
122+
'sed -i "s/@MONGOC_USER_SET_CFLAGS@//g" $OUT',
123+
'sed -i "s/@MONGOC_USER_SET_LDFLAGS@//g" $OUT',
124+
'sed -i "s/@MONGOC_ENABLE_CRYPTO_CNG@/0/g" $OUT',
125+
'sed -i "s/@MONGOC_SOCKET_ARG2@/struct sockaddr/g" $OUT',
126+
'sed -i "s/@MONGOC_SOCKET_ARG3@/socklen_t/g" $OUT',
127+
'sed -i "s/@MONGOC_ENABLE_ICU@/0/g" $OUT',
128+
'sed -i "s/@MONGOC_TRACE@/0/g" $OUT',
129+
'sed -i "s/@MONGOC_ENABLE_SHM_COUNTERS@/1/g" $OUT',
130+
'sed -i "s/@MONGOC_ENABLE_COMPRESSION@/1/g" $OUT',
131+
'sed -i "s/@MONGOC_ENABLE_COMPRESSION_ZLIB@/1/g" $OUT',
132+
'sed -i "s/@MONGOC_ENABLE_COMPRESSION_SNAPPY@/0/g" $OUT',
133+
'sed -i "s/@MONGOC_ENABLE_RDTSCP@/0/g" $OUT',
134+
'sed -i "s/@MONGOC_HAVE_SCHED_GETCPU@/0/g" $OUT',
135+
'sed -i "s/@MONGOC_ENABLE_SSL_SECURE_CHANNEL@/0/g" $OUT',
136+
'sed -i "s/@MONGOC_HAVE_RES_NSEARCH@/1/g" $OUT',
137+
'sed -i "s/@MONGOC_HAVE_RES_NDESTROY@/0/g" $OUT',
138+
'sed -i "s/@MONGOC_HAVE_RES_NCLOSE@/1/g" $OUT',
139+
'sed -i "s/@MONGOC_HAVE_DNSAPI@/0/g" $OUT',
140+
'sed -i "s/@MONGOC_ENABLE_SSL_LIBRESSL@/0/g" $OUT',
141+
'sed -i "s/@MONGOC_HAVE_RES_SEARCH@/0/g" $OUT',
142+
'sed -i "s/@MONGOC_ENABLE_CRYPTO_LIBCRYPTO@/1/g" $OUT',
143+
'sed -i "s/@MONGOC_NO_AUTOMATIC_GLOBALS@/0/g" $OUT',
144+
'sed -i "s/@MONGOC_HAVE_SOCKLEN@/1/g" $OUT',
145+
'sed -i "s/@MONGOC_ENABLE_SASL_SSPI@/0/g" $OUT',
146+
'sed -i "s/@MONGOC_HAVE_ASN1_STRING_GET0_DATA@/1/g" $OUT',
147+
'sed -i "s/@MONGOC_HAVE_SASL_CLIENT_DONE@/0/g" $OUT',
148+
'sed -i "s/@MONGOC_ENABLE_SASL@/0/g" $OUT',
149+
'sed -i "s/@MONGOC_ENABLE_SASL_CYRUS@/0/g" $OUT',
150+
'sed -i "s/@MONGOC_ENABLE_SSL_OPENSSL@/1/g" $OUT',
151+
'sed -i "s/@MONGOC_ENABLE_CRYPTO@/1/g" $OUT',
152+
'sed -i "s/@MONGOC_ENABLE_SSL@/1/g" $OUT',
153+
'sed -i "s/@MONGOC_ENABLE_CRYPTO_SYSTEM_PROFILE@/0/g" $OUT',
154+
'sed -i "s/@MONGOC_ENABLE_CRYPTO_COMMON_CRYPTO@/0/g" $OUT',
155+
'sed -i "s/@MONGOC_ENABLE_SSL_SECURE_TRANSPORT@/0/g" $OUT',
156+
]),
157+
)
158+
159+
macos_srcs = glob([
160+
'src/libmongoc/src/mongoc/mongoc-rand-common-crypto.c',
161+
])
162+
163+
windows_srcs = glob([
164+
'src/libmongoc/src/mongoc/mongoc-rand-cng.c',
165+
])
166+
167+
platform_srcs = macos_srcs + windows_srcs
168+
169+
cxx_library(
170+
name = 'mongoc',
171+
header_namespace = '',
172+
exported_headers = dict(
173+
subdir_glob([
174+
('src/common', '**/*.h'),
175+
('src/libmongoc/src', '**/*.h'),
176+
]).items() + [
177+
('mongoc/mongoc-config.h', ':mongoc-config'),
178+
('mongoc/mongoc-version.h', ':mongoc-version'),
179+
]
180+
),
181+
headers = subdir_glob([
182+
('src/libmongoc/src/mongoc', '**/*.defs'),
183+
('src/libmongoc/src/mongoc', '**/*.def'),
184+
('src/libmongoc/src', '**/*.def'),
185+
]),
186+
srcs = glob([
187+
'src/libmongoc/src/**/*.c',
188+
]),
189+
platform_preprocessor_flags = [
190+
('^macos.*', gcc_pp_flags),
191+
('^linux.*', gcc_pp_flags),
192+
],
193+
platform_srcs = [
194+
('macos.*', macos_srcs),
195+
('windows.*', windows_srcs),
196+
],
197+
deps = [
198+
':bson',
199+
],
200+
visibility = [
201+
'PUBLIC',
202+
],
203+
)

buckaroo.lock.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
manifest = "d0945ce4c316309a2c6a2058f97ec8c73ff26e7cfb77b29835c2914efe1ff278"
2+

buckaroo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
targets = [ "//:monogoc" ]

buckaroo_macros.bzl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
def buckaroo_cell(package):
2+
cell = native.read_config('buckaroo', package, '').strip()
3+
if cell == '':
4+
fail('Buckaroo does not have "' + package + '" installed. ')
5+
return cell
6+
7+
def buckaroo_deps():
8+
raw = native.read_config('buckaroo', 'dependencies', '').split(' ')
9+
return [ x.strip() for x in raw if len(x.strip()) > 0 ]
10+
11+
def buckaroo_deps_from_package(package):
12+
cell = buckaroo_cell(package)
13+
all_deps = buckaroo_deps()
14+
return [ x for x in all_deps if x.startswith(cell) ]

subdir_glob.bzl

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
"""Provides utility macros for working with globs."""
2+
3+
def _paths_join(path, *others):
4+
"""Joins one or more path components."""
5+
result = path
6+
7+
for p in others:
8+
if p.startswith("/"): # absolute
9+
result = p
10+
elif not result or result.endswith("/"):
11+
result += p
12+
else:
13+
result += "/" + p
14+
15+
return result
16+
17+
def subdir_glob(glob_specs, exclude = None, prefix = ""):
18+
"""Returns a dict of sub-directory relative paths to full paths.
19+
20+
The subdir_glob() function is useful for defining header maps for C/C++
21+
libraries which should be relative the given sub-directory.
22+
Given a list of tuples, the form of (relative-sub-directory, glob-pattern),
23+
it returns a dict of sub-directory relative paths to full paths.
24+
25+
Please refer to native.glob() for explanations and examples of the pattern.
26+
27+
Args:
28+
glob_specs: The array of tuples in form of
29+
(relative-sub-directory, glob-pattern inside relative-sub-directory).
30+
type: List[Tuple[str, str]]
31+
exclude: A list of patterns to identify files that should be removed
32+
from the set specified by the first argument. Defaults to [].
33+
type: Optional[List[str]]
34+
prefix: If is not None, prepends it to each key in the dictionary.
35+
Defaults to None.
36+
type: Optional[str]
37+
38+
Returns:
39+
A dict of sub-directory relative paths to full paths.
40+
"""
41+
if exclude == None:
42+
exclude = []
43+
44+
results = []
45+
46+
for dirpath, glob_pattern in glob_specs:
47+
results.append(
48+
_single_subdir_glob(dirpath, glob_pattern, exclude, prefix),
49+
)
50+
51+
return _merge_maps(*results)
52+
53+
def _merge_maps(*file_maps):
54+
result = {}
55+
for file_map in file_maps:
56+
for key in file_map:
57+
if key in result and result[key] != file_map[key]:
58+
fail(
59+
"Conflicting files in file search paths. " +
60+
"\"%s\" maps to both \"%s\" and \"%s\"." %
61+
(key, result[key], file_map[key]),
62+
)
63+
64+
result[key] = file_map[key]
65+
66+
return result
67+
68+
def _single_subdir_glob(dirpath, glob_pattern, exclude = None, prefix = None):
69+
if exclude == None:
70+
exclude = []
71+
results = {}
72+
files = native.glob([_paths_join(dirpath, glob_pattern)], exclude = exclude)
73+
for f in files:
74+
if dirpath:
75+
key = f[len(dirpath) + 1:]
76+
else:
77+
key = f
78+
if prefix:
79+
key = _paths_join(prefix, key)
80+
results[key] = f
81+
82+
return results

0 commit comments

Comments
 (0)