Skip to content

Commit 1742a20

Browse files
committed
fix: use dedicated export macro for module
1 parent 59e3366 commit 1742a20

File tree

8 files changed

+55
-41
lines changed

8 files changed

+55
-41
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
build
2-
include/saucer/export.h
2+
**/export.h
33

44
.vs
55
.cache

CMakeLists.txt

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,9 @@ endif()
3939
# Export header
4040
# --------------------------------------------------------------------------------------------------------
4141

42-
include(GenerateExportHeader)
42+
include("cmake/export.cmake")
4343

44-
generate_export_header(
45-
${PROJECT_NAME}
46-
EXPORT_MACRO_NAME "SAUCER_EXPORT"
47-
EXPORT_FILE_NAME "${CMAKE_CURRENT_SOURCE_DIR}/include/saucer/export.h"
48-
)
44+
saucer_bindings_export(${PROJECT_NAME} "SAUCER_EXPORT")
4945

5046
# --------------------------------------------------------------------------------------------------------
5147
# Include directories
@@ -61,8 +57,7 @@ target_include_directories(${PROJECT_NAME} PRIVATE "include/saucer" "private")
6157
target_sources(${PROJECT_NAME} PRIVATE
6258
"src/app.cpp"
6359
"src/options.cpp"
64-
65-
"src/string.cpp"
60+
6661
"src/memory.cpp"
6762

6863
"src/icon.cpp"
@@ -99,6 +94,8 @@ target_link_libraries(${PROJECT_NAME} PUBLIC saucer::saucer)
9994
# Setup Modules
10095
# --------------------------------------------------------------------------------------------------------
10196

97+
include("cmake/module.cmake")
98+
10299
if (saucer_desktop)
103100
add_subdirectory("modules/desktop")
104101
endif()

cmake/export.cmake

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
include(GenerateExportHeader)
2+
3+
function(saucer_bindings_export NAME MACRO)
4+
generate_export_header(
5+
${NAME}
6+
EXPORT_MACRO_NAME "${MACRO}"
7+
EXPORT_FILE_NAME "${CMAKE_CURRENT_SOURCE_DIR}/include/saucer/export.h"
8+
)
9+
endfunction()

cmake/module.cmake

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
function(saucer_bindings_add_module NAME MACRO)
2+
message(STATUS "[saucer-bindings] Adding module: ${NAME}")
3+
4+
saucer_bindings_export(${NAME} ${MACRO})
5+
get_target_property(priv_includes saucer::bindings INCLUDE_DIRECTORIES)
6+
7+
target_link_libraries(${NAME} PUBLIC saucer::bindings)
8+
target_include_directories(${NAME} PRIVATE ${priv_includes})
9+
endfunction()

modules/desktop/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 23 CXX_EXTENSIONS
1515
# --------------------------------------------------------------------------------------------------------
1616

1717
target_include_directories(${PROJECT_NAME} PUBLIC "include")
18-
target_include_directories(${PROJECT_NAME} PRIVATE "include/saucer" "../../private")
18+
target_include_directories(${PROJECT_NAME} PRIVATE "include/saucer")
1919

2020
# --------------------------------------------------------------------------------------------------------
2121
# Add Sources
@@ -36,4 +36,4 @@ CPMFindPackage(
3636
)
3737

3838
target_link_libraries(${PROJECT_NAME} PRIVATE saucer::desktop)
39-
target_link_libraries(${PROJECT_NAME} PUBLIC saucer::bindings)
39+
saucer_bindings_add_module(${PROJECT_NAME} "SAUCER_DESKTOP_EXPORT")

modules/desktop/include/saucer/desktop.h

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,24 @@ extern "C"
55
{
66
#endif
77

8+
#include "export.h"
9+
810
#include <saucer/app.h>
911

1012
struct saucer_desktop;
1113

12-
SAUCER_EXPORT saucer_desktop *saucer_desktop_new(saucer_application *app);
13-
SAUCER_EXPORT void saucer_desktop_free(saucer_desktop *);
14+
SAUCER_DESKTOP_EXPORT saucer_desktop *saucer_desktop_new(saucer_application *app);
15+
SAUCER_DESKTOP_EXPORT void saucer_desktop_free(saucer_desktop *);
1416

15-
SAUCER_EXPORT void saucer_desktop_open(saucer_desktop *, const char *path);
17+
SAUCER_DESKTOP_EXPORT void saucer_desktop_open(saucer_desktop *, const char *path);
1618

1719
struct saucer_picker_options;
1820

19-
SAUCER_EXPORT saucer_picker_options *saucer_picker_options_new();
20-
SAUCER_EXPORT void saucer_picker_options_free(saucer_picker_options *);
21+
SAUCER_DESKTOP_EXPORT saucer_picker_options *saucer_picker_options_new();
22+
SAUCER_DESKTOP_EXPORT void saucer_picker_options_free(saucer_picker_options *);
2123

22-
SAUCER_EXPORT void saucer_picker_options_set_initial(saucer_picker_options *, const char *path);
23-
SAUCER_EXPORT void saucer_picker_options_add_filter(saucer_picker_options *, const char *filter);
24+
SAUCER_DESKTOP_EXPORT void saucer_picker_options_set_initial(saucer_picker_options *, const char *path);
25+
SAUCER_DESKTOP_EXPORT void saucer_picker_options_add_filter(saucer_picker_options *, const char *filter);
2426

2527
/**
2628
* @note The returned array will be populated with strings which are themselves dynamically allocated.
@@ -29,17 +31,17 @@ extern "C"
2931
* - Free all strings within the array
3032
* - Free the array itself
3133
*/
32-
/*[[sc::requires_free]]*/ SAUCER_EXPORT char *saucer_desktop_pick_file(saucer_desktop *,
33-
saucer_picker_options *options);
34+
/*[[sc::requires_free]]*/ SAUCER_DESKTOP_EXPORT char *saucer_desktop_pick_file(saucer_desktop *,
35+
saucer_picker_options *options);
3436

35-
/*[[sc::requires_free]]*/ SAUCER_EXPORT char *saucer_desktop_pick_folder(saucer_desktop *,
36-
saucer_picker_options *options);
37+
/*[[sc::requires_free]]*/ SAUCER_DESKTOP_EXPORT char *saucer_desktop_pick_folder(saucer_desktop *,
38+
saucer_picker_options *options);
3739

38-
/*[[sc::requires_free]]*/ SAUCER_EXPORT char **saucer_desktop_pick_files(saucer_desktop *,
39-
saucer_picker_options *options);
40+
/*[[sc::requires_free]]*/ SAUCER_DESKTOP_EXPORT char **saucer_desktop_pick_files(saucer_desktop *,
41+
saucer_picker_options *options);
4042

41-
/*[[sc::requires_free]]*/ SAUCER_EXPORT char **saucer_desktop_pick_folders(saucer_desktop *,
42-
saucer_picker_options *options);
43+
/*[[sc::requires_free]]*/ SAUCER_DESKTOP_EXPORT char **saucer_desktop_pick_folders(saucer_desktop *,
44+
saucer_picker_options *options);
4345

4446
#ifdef __cplusplus
4547
}

private/utils/string.hpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,19 @@
11
#pragma once
22

3+
#include "memory.h"
4+
35
#include <string>
46

57
namespace bindings
68
{
7-
char *alloc(const std::string &);
9+
inline char *alloc(const std::string &value)
10+
{
11+
const auto size = value.size();
12+
char *const rtn = static_cast<char *>(saucer_memory_alloc(size + 1));
13+
14+
value.copy(rtn, size);
15+
rtn[size] = '\0';
16+
17+
return rtn;
18+
}
819
} // namespace bindings

src/string.cpp

Lines changed: 0 additions & 14 deletions
This file was deleted.

0 commit comments

Comments
 (0)