Skip to content

Commit 2648202

Browse files
committed
refactor: completely refactor the library
reorganize the folder structure, so that it can be better used as external library add windows export declarations better handle headers add variables to the pkgconfig file, to resemble oopetris-core
1 parent c22ad7d commit 2648202

File tree

10 files changed

+146
-66
lines changed

10 files changed

+146
-66
lines changed

meson.build

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ liboopetris_c_wrapper = library(
2727
'oopetris_c_wrapper',
2828
src_files,
2929
dependencies: deps,
30+
cpp_shared_args: ['-DOOPETRIS_LIBRARY_C_WRAPPER_EXPORT'],
3031
override_options: {
3132
'warning_level': '3',
3233
'werror': true,
@@ -43,6 +44,14 @@ liboopetris_c_wrapper_dep = declare_dependency(
4344
)
4445
meson.override_dependency('liboopetris-c-wrapper', liboopetris_c_wrapper_dep)
4546

47+
cpp = meson.get_compiler('cpp')
48+
49+
pkg_cpp_compiler = cpp.get_id()
50+
pkg_cpp_stdlib = 'unknown'
51+
if cpp.get_id() == 'clang'
52+
pkg_cpp_stdlib = build_with_libcpp ? 'libc++' : 'libstdc++'
53+
endif
54+
4655
# generate pkgconfig files
4756
pkg = import('pkgconfig')
4857
pkg.generate(
@@ -51,6 +60,7 @@ pkg.generate(
5160
name: 'oopetris-c-wrapper',
5261
filebase: 'oopetris-c-wrapper',
5362
subdirs: 'oopetris',
63+
variables: ['compiler=' + pkg_cpp_compiler, 'cpp_stdlib=' + pkg_cpp_stdlib],
5464
)
5565

5666
if get_option('tests')

src/c_wrapper/meson.build

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
_header_files = files(
2+
'windows.h',
3+
'wrapper.h',
4+
)
5+
6+
src_files += files(
7+
'opaque_types.h', # not needed to be installed
8+
'wrapper.cpp',
9+
)
10+
11+
install_headers(
12+
_header_files,
13+
install_dir: c_wrapper_include_dir,
14+
preserve_path: true,
15+
)
16+
17+
src_files += _header_files
18+
19+
subdir('thirdparty')
File renamed without changes.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
_header_files = files(
2+
'stb_ds.h',
3+
)
4+
5+
install_headers(
6+
_header_files,
7+
install_dir: c_wrapper_include_dir / 'thirdparty',
8+
preserve_path: true,
9+
)
10+
11+
src_files += _header_files
File renamed without changes.

src/c_wrapper/windows.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#pragma once
2+
3+
#ifdef __cplusplus
4+
extern "C" {
5+
#endif
6+
7+
8+
#if defined(_MSC_VER)
9+
#if defined(OOPETRIS_LIBRARY_C_WRAPPER_EXPORT)
10+
#define OOPETRIS_C_WRAPPER_EXPORTED __declspec(dllexport)
11+
#else
12+
#define OOPETRIS_C_WRAPPER_EXPORTED __declspec(dllimport)
13+
#endif
14+
#else
15+
#define OOPETRIS_C_WRAPPER_EXPORTED
16+
#endif
17+
18+
19+
#ifdef __cplusplus
20+
}
21+
#endif
File renamed without changes.

src/oopetris_wrapper.h renamed to src/c_wrapper/wrapper.h

Lines changed: 82 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#define OOPETRIS_MALLOC(s) OOPETRIS_REALLOC(NULL, s)
3131

3232
#include "./thirdparty/stb_ds.h"
33+
#include "./windows.h"
3334

3435

3536
#ifdef __cplusplus
@@ -44,20 +45,22 @@ extern "C" {
4445
* @param file_path The FilePath of the potential recording file
4546
* @return bool
4647
*/
47-
bool oopetris_is_recording_file(const char* file_path);
48+
OOPETRIS_C_WRAPPER_EXPORTED bool oopetris_is_recording_file(const char* file_path);
4849

4950
// opaque type
5051
typedef struct OOPetrisAdditionalInformationImpl OOPetrisAdditionalInformation;
5152

5253
// opaque type
5354
typedef struct OOPetrisAdditionalInformationFieldImpl OOPetrisAdditionalInformationField;
5455

55-
const char** oopetris_additional_information_get_keys(OOPetrisAdditionalInformation* information);
56+
OOPETRIS_C_WRAPPER_EXPORTED const char** oopetris_additional_information_get_keys(
57+
OOPetrisAdditionalInformation* information
58+
);
5659

5760

58-
void oopetris_additional_information_keys_free(const char** keys);
61+
OOPETRIS_C_WRAPPER_EXPORTED void oopetris_additional_information_keys_free(const char** keys);
5962

60-
const OOPetrisAdditionalInformationField*
63+
OOPETRIS_C_WRAPPER_EXPORTED const OOPetrisAdditionalInformationField*
6164
oopetris_additional_information_get_field(OOPetrisAdditionalInformation* information, const char* key);
6265

6366

@@ -77,34 +80,46 @@ typedef enum {
7780
} OOPetrisAdditionalInformationType;
7881

7982

80-
OOPetrisAdditionalInformationType oopetris_additional_information_field_get_type(
83+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisAdditionalInformationType
84+
oopetris_additional_information_field_get_type(const OOPetrisAdditionalInformationField* const field);
85+
86+
OOPETRIS_C_WRAPPER_EXPORTED const char* oopetris_additional_information_field_get_string(
8187
const OOPetrisAdditionalInformationField* const field
8288
);
8389

84-
const char* oopetris_additional_information_field_get_string(const OOPetrisAdditionalInformationField* const field);
85-
86-
float oopetris_additional_information_field_get_float(const OOPetrisAdditionalInformationField* const field);
90+
OOPETRIS_C_WRAPPER_EXPORTED float oopetris_additional_information_field_get_float(
91+
const OOPetrisAdditionalInformationField* const field
92+
);
8793

88-
double oopetris_additional_information_field_get_double(const OOPetrisAdditionalInformationField* const field);
94+
OOPETRIS_C_WRAPPER_EXPORTED double oopetris_additional_information_field_get_double(
95+
const OOPetrisAdditionalInformationField* const field
96+
);
8997

90-
bool oopetris_additional_information_field_get_bool(const OOPetrisAdditionalInformationField* const field);
98+
OOPETRIS_C_WRAPPER_EXPORTED bool oopetris_additional_information_field_get_bool(
99+
const OOPetrisAdditionalInformationField* const field
100+
);
91101

92-
uint8_t oopetris_additional_information_field_get_u8(const OOPetrisAdditionalInformationField* const field);
102+
OOPETRIS_C_WRAPPER_EXPORTED uint8_t
103+
oopetris_additional_information_field_get_u8(const OOPetrisAdditionalInformationField* const field);
93104

94-
int8_t oopetris_additional_information_field_get_i8(const OOPetrisAdditionalInformationField* const field);
105+
OOPETRIS_C_WRAPPER_EXPORTED int8_t
106+
oopetris_additional_information_field_get_i8(const OOPetrisAdditionalInformationField* const field);
95107

96-
uint32_t oopetris_additional_information_field_get_u32(const OOPetrisAdditionalInformationField* const field);
108+
OOPETRIS_C_WRAPPER_EXPORTED uint32_t
109+
oopetris_additional_information_field_get_u32(const OOPetrisAdditionalInformationField* const field);
97110

98111

99-
int32_t oopetris_additional_information_field_get_i32(const OOPetrisAdditionalInformationField* const field);
112+
OOPETRIS_C_WRAPPER_EXPORTED int32_t
113+
oopetris_additional_information_field_get_i32(const OOPetrisAdditionalInformationField* const field);
100114

101-
uint64_t oopetris_additional_information_field_get_u64(const OOPetrisAdditionalInformationField* const field);
115+
OOPETRIS_C_WRAPPER_EXPORTED uint64_t
116+
oopetris_additional_information_field_get_u64(const OOPetrisAdditionalInformationField* const field);
102117

103-
int64_t oopetris_additional_information_field_get_i64(const OOPetrisAdditionalInformationField* const field);
118+
OOPETRIS_C_WRAPPER_EXPORTED int64_t
119+
oopetris_additional_information_field_get_i64(const OOPetrisAdditionalInformationField* const field);
104120

105-
const OOPetrisAdditionalInformationField* const* oopetris_additional_information_field_get_vector(
106-
const OOPetrisAdditionalInformationField* const field
107-
);
121+
OOPETRIS_C_WRAPPER_EXPORTED const OOPetrisAdditionalInformationField* const*
122+
oopetris_additional_information_field_get_vector(const OOPetrisAdditionalInformationField* const field);
108123

109124

110125
//TODO(): once we only support C23 (which also the compiled lib has to support ), add underlying enum type uint8_t
@@ -192,39 +207,39 @@ typedef struct OOPetrisRecordingReturnValueImpl OOPetrisRecordingReturnValue;
192207
* @param file_path The FilePath of the recording file
193208
* @return OOPetrisRecordingReturnValue*
194209
*/
195-
OOPetrisRecordingReturnValue* oopetris_get_recording_information(const char* file_path);
210+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisRecordingReturnValue* oopetris_get_recording_information(const char* file_path);
196211

197212
/**
198213
* @brief Determine if the given OOPetrisRecordingReturnValue* is an error or not, after calling this you can call either oopetris_get_error or oopetris_get_information. This has to be freed later, but pay attention, which free function you use, read more in the description of oopetris_free_recording_value
199214
*
200215
* @param value The return value of oopetris_get_recording_information
201216
* @return bool
202217
*/
203-
bool oopetris_is_error(OOPetrisRecordingReturnValue* value);
218+
OOPETRIS_C_WRAPPER_EXPORTED bool oopetris_is_error(OOPetrisRecordingReturnValue* value);
204219

205-
const char* oopetris_get_error(OOPetrisRecordingReturnValue* value);
220+
OOPETRIS_C_WRAPPER_EXPORTED const char* oopetris_get_error(OOPetrisRecordingReturnValue* value);
206221

207-
OOPetrisRecordingInformation* oopetris_get_information(OOPetrisRecordingReturnValue* value);
222+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisRecordingInformation* oopetris_get_information(OOPetrisRecordingReturnValue* value);
208223

209-
void oopetris_free_recording_information(OOPetrisRecordingInformation* information);
224+
OOPETRIS_C_WRAPPER_EXPORTED void oopetris_free_recording_information(OOPetrisRecordingInformation* information);
210225

211-
void oopetris_free_recording_value_only(OOPetrisRecordingReturnValue* information);
226+
OOPETRIS_C_WRAPPER_EXPORTED void oopetris_free_recording_value_only(OOPetrisRecordingReturnValue* information);
212227

213-
void oopetris_free_recording_value_whole(OOPetrisRecordingReturnValue* information);
228+
OOPETRIS_C_WRAPPER_EXPORTED void oopetris_free_recording_value_whole(OOPetrisRecordingReturnValue* information);
214229

215-
const char* oopetris_get_lib_version(void);
230+
OOPETRIS_C_WRAPPER_EXPORTED const char* oopetris_get_lib_version(void);
216231

217232
typedef struct {
218233
uint32_t height;
219234
uint32_t width;
220235
} OOPetrisGridProperties;
221236

222-
OOPetrisGridProperties* oopetris_get_grid_properties(void);
237+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisGridProperties* oopetris_get_grid_properties(void);
223238

224-
void oopetris_free_grid_properties(OOPetrisGridProperties* properties);
239+
OOPETRIS_C_WRAPPER_EXPORTED void oopetris_free_grid_properties(OOPetrisGridProperties* properties);
225240

226241

227-
size_t oopetris_array_len(void* const array);
242+
OOPETRIS_C_WRAPPER_EXPORTED size_t oopetris_array_len(void* const array);
228243

229244
#define FREE_AND_SET_NULL(fn, obj) \
230245
do { \
@@ -235,7 +250,7 @@ size_t oopetris_array_len(void* const array);
235250

236251
// CREATION functions
237252

238-
OOPetrisRecordingInformation* oopetris_create_recording_information(void);
253+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisRecordingInformation* oopetris_create_recording_information(void);
239254

240255
void oopetris_add_information_field(
241256
OOPetrisAdditionalInformation* additional_information,
@@ -244,42 +259,61 @@ void oopetris_add_information_field(
244259
);
245260

246261

247-
OOPetrisAdditionalInformationField* oopetris_additional_information_create_string(const char* value);
262+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisAdditionalInformationField* oopetris_additional_information_create_string(
263+
const char* value
264+
);
248265

249-
OOPetrisAdditionalInformationField* oopetris_additional_information_create_float(float value);
266+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisAdditionalInformationField* oopetris_additional_information_create_float(float value
267+
);
250268

251-
OOPetrisAdditionalInformationField* oopetris_additional_information_create_double(double value);
269+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisAdditionalInformationField* oopetris_additional_information_create_double(
270+
double value
271+
);
252272

253-
OOPetrisAdditionalInformationField* oopetris_additional_information_create_bool(bool value);
273+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisAdditionalInformationField* oopetris_additional_information_create_bool(bool value);
254274

255-
OOPetrisAdditionalInformationField* oopetris_additional_information_create_u8(uint8_t value);
275+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisAdditionalInformationField* oopetris_additional_information_create_u8(uint8_t value
276+
);
256277

257-
OOPetrisAdditionalInformationField* oopetris_additional_information_create_i8(int8_t value);
278+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisAdditionalInformationField* oopetris_additional_information_create_i8(int8_t value);
258279

259-
OOPetrisAdditionalInformationField* oopetris_additional_information_create_u32(uint32_t value);
280+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisAdditionalInformationField* oopetris_additional_information_create_u32(
281+
uint32_t value
282+
);
260283

261284

262-
OOPetrisAdditionalInformationField* oopetris_additional_information_create_i32(int32_t value);
285+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisAdditionalInformationField* oopetris_additional_information_create_i32(int32_t value
286+
);
263287

264-
OOPetrisAdditionalInformationField* oopetris_additional_information_create_u64(uint64_t value);
288+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisAdditionalInformationField* oopetris_additional_information_create_u64(
289+
uint64_t value
290+
);
265291

266-
OOPetrisAdditionalInformationField* oopetris_additional_information_create_i64(int64_t value);
292+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisAdditionalInformationField* oopetris_additional_information_create_i64(int64_t value
293+
);
267294

268-
OOPetrisAdditionalInformationField** oopetris_additional_information_create_empty_vector(void);
295+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisAdditionalInformationField** oopetris_additional_information_create_empty_vector(
296+
void
297+
);
269298

270-
OOPetrisAdditionalInformationField** oopetris_additional_information_create_vector_with_size(size_t size);
299+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisAdditionalInformationField**
300+
oopetris_additional_information_create_vector_with_size(size_t size);
271301

272-
OOPetrisAdditionalInformationField* oopetris_additional_information_create_vector(
302+
OOPETRIS_C_WRAPPER_EXPORTED OOPetrisAdditionalInformationField* oopetris_additional_information_create_vector(
273303
OOPetrisAdditionalInformationField** value
274304
);
275305

276-
void oopetris_add_record(OOPetrisRecordingInformation* information, OOPetrisTetrionRecord record);
306+
OOPETRIS_C_WRAPPER_EXPORTED void
307+
oopetris_add_record(OOPetrisRecordingInformation* information, OOPetrisTetrionRecord record);
277308

278-
void oopetris_add_snapshot(OOPetrisRecordingInformation* information, OOPetrisTetrionSnapshot snapshot);
309+
OOPETRIS_C_WRAPPER_EXPORTED void
310+
oopetris_add_snapshot(OOPetrisRecordingInformation* information, OOPetrisTetrionSnapshot snapshot);
279311

280-
void oopetris_add_header(OOPetrisRecordingInformation* information, OOPetrisTetrionHeader tetrion_header);
312+
OOPETRIS_C_WRAPPER_EXPORTED void
313+
oopetris_add_header(OOPetrisRecordingInformation* information, OOPetrisTetrionHeader tetrion_header);
281314

282-
char* oopetris_write_to_file(OOPetrisRecordingInformation* information, const char* file_path, bool overwrite);
315+
OOPETRIS_C_WRAPPER_EXPORTED char*
316+
oopetris_write_to_file(OOPetrisRecordingInformation* information, const char* file_path, bool overwrite);
283317

284318

285319
#ifdef __cplusplus

src/meson.build

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,4 @@
11
include_dir = get_option('prefix') / get_option('includedir')
2-
c_wrapper_include_dir = include_dir / 'oopetris'
2+
c_wrapper_include_dir = include_dir / 'oopetris' / 'c_wrapper'
33

4-
install_headers(
5-
files('oopetris_wrapper.h'),
6-
install_dir: c_wrapper_include_dir,
7-
preserve_path: true,
8-
)
9-
10-
install_headers(
11-
files('thirdparty/stb_ds.h'),
12-
install_dir: c_wrapper_include_dir / 'thirdparty',
13-
preserve_path: true,
14-
)
15-
16-
src_files += files(
17-
'opaque_types.h',
18-
'wrapper.cpp',
19-
)
4+
subdir('c_wrapper')

tools/dependencies/meson.build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ oopetris_recordings_dep = dependency('oopetris-recordings')
22

33
dep_compiler = oopetris_recordings_dep.get_variable(
44
pkgconfig: 'compiler',
5-
internal: '__NOT_DEFINED__',
5+
internal: 'pkg_cpp_compiler',
66
default_value: cpp.get_id(),
77
)
88

0 commit comments

Comments
 (0)