Skip to content

Commit

Permalink
fix: use dedicated export macro for module
Browse files Browse the repository at this point in the history
  • Loading branch information
Curve committed Jan 1, 2025
1 parent 59e3366 commit 1742a20
Show file tree
Hide file tree
Showing 8 changed files with 55 additions and 41 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
build
include/saucer/export.h
**/export.h

.vs
.cache
Expand Down
13 changes: 5 additions & 8 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,9 @@ endif()
# Export header
# --------------------------------------------------------------------------------------------------------

include(GenerateExportHeader)
include("cmake/export.cmake")

generate_export_header(
${PROJECT_NAME}
EXPORT_MACRO_NAME "SAUCER_EXPORT"
EXPORT_FILE_NAME "${CMAKE_CURRENT_SOURCE_DIR}/include/saucer/export.h"
)
saucer_bindings_export(${PROJECT_NAME} "SAUCER_EXPORT")

# --------------------------------------------------------------------------------------------------------
# Include directories
Expand All @@ -61,8 +57,7 @@ target_include_directories(${PROJECT_NAME} PRIVATE "include/saucer" "private")
target_sources(${PROJECT_NAME} PRIVATE
"src/app.cpp"
"src/options.cpp"

"src/string.cpp"

"src/memory.cpp"

"src/icon.cpp"
Expand Down Expand Up @@ -99,6 +94,8 @@ target_link_libraries(${PROJECT_NAME} PUBLIC saucer::saucer)
# Setup Modules
# --------------------------------------------------------------------------------------------------------

include("cmake/module.cmake")

if (saucer_desktop)
add_subdirectory("modules/desktop")
endif()
9 changes: 9 additions & 0 deletions cmake/export.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
include(GenerateExportHeader)

function(saucer_bindings_export NAME MACRO)
generate_export_header(
${NAME}
EXPORT_MACRO_NAME "${MACRO}"
EXPORT_FILE_NAME "${CMAKE_CURRENT_SOURCE_DIR}/include/saucer/export.h"
)
endfunction()
9 changes: 9 additions & 0 deletions cmake/module.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
function(saucer_bindings_add_module NAME MACRO)
message(STATUS "[saucer-bindings] Adding module: ${NAME}")

saucer_bindings_export(${NAME} ${MACRO})
get_target_property(priv_includes saucer::bindings INCLUDE_DIRECTORIES)

target_link_libraries(${NAME} PUBLIC saucer::bindings)
target_include_directories(${NAME} PRIVATE ${priv_includes})
endfunction()
4 changes: 2 additions & 2 deletions modules/desktop/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 23 CXX_EXTENSIONS
# --------------------------------------------------------------------------------------------------------

target_include_directories(${PROJECT_NAME} PUBLIC "include")
target_include_directories(${PROJECT_NAME} PRIVATE "include/saucer" "../../private")
target_include_directories(${PROJECT_NAME} PRIVATE "include/saucer")

# --------------------------------------------------------------------------------------------------------
# Add Sources
Expand All @@ -36,4 +36,4 @@ CPMFindPackage(
)

target_link_libraries(${PROJECT_NAME} PRIVATE saucer::desktop)
target_link_libraries(${PROJECT_NAME} PUBLIC saucer::bindings)
saucer_bindings_add_module(${PROJECT_NAME} "SAUCER_DESKTOP_EXPORT")
32 changes: 17 additions & 15 deletions modules/desktop/include/saucer/desktop.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,24 @@ extern "C"
{
#endif

#include "export.h"

#include <saucer/app.h>

struct saucer_desktop;

SAUCER_EXPORT saucer_desktop *saucer_desktop_new(saucer_application *app);
SAUCER_EXPORT void saucer_desktop_free(saucer_desktop *);
SAUCER_DESKTOP_EXPORT saucer_desktop *saucer_desktop_new(saucer_application *app);
SAUCER_DESKTOP_EXPORT void saucer_desktop_free(saucer_desktop *);

SAUCER_EXPORT void saucer_desktop_open(saucer_desktop *, const char *path);
SAUCER_DESKTOP_EXPORT void saucer_desktop_open(saucer_desktop *, const char *path);

struct saucer_picker_options;

SAUCER_EXPORT saucer_picker_options *saucer_picker_options_new();
SAUCER_EXPORT void saucer_picker_options_free(saucer_picker_options *);
SAUCER_DESKTOP_EXPORT saucer_picker_options *saucer_picker_options_new();
SAUCER_DESKTOP_EXPORT void saucer_picker_options_free(saucer_picker_options *);

SAUCER_EXPORT void saucer_picker_options_set_initial(saucer_picker_options *, const char *path);
SAUCER_EXPORT void saucer_picker_options_add_filter(saucer_picker_options *, const char *filter);
SAUCER_DESKTOP_EXPORT void saucer_picker_options_set_initial(saucer_picker_options *, const char *path);
SAUCER_DESKTOP_EXPORT void saucer_picker_options_add_filter(saucer_picker_options *, const char *filter);

/**
* @note The returned array will be populated with strings which are themselves dynamically allocated.
Expand All @@ -29,17 +31,17 @@ extern "C"
* - Free all strings within the array
* - Free the array itself
*/
/*[[sc::requires_free]]*/ SAUCER_EXPORT char *saucer_desktop_pick_file(saucer_desktop *,
saucer_picker_options *options);
/*[[sc::requires_free]]*/ SAUCER_DESKTOP_EXPORT char *saucer_desktop_pick_file(saucer_desktop *,
saucer_picker_options *options);

/*[[sc::requires_free]]*/ SAUCER_EXPORT char *saucer_desktop_pick_folder(saucer_desktop *,
saucer_picker_options *options);
/*[[sc::requires_free]]*/ SAUCER_DESKTOP_EXPORT char *saucer_desktop_pick_folder(saucer_desktop *,
saucer_picker_options *options);

/*[[sc::requires_free]]*/ SAUCER_EXPORT char **saucer_desktop_pick_files(saucer_desktop *,
saucer_picker_options *options);
/*[[sc::requires_free]]*/ SAUCER_DESKTOP_EXPORT char **saucer_desktop_pick_files(saucer_desktop *,
saucer_picker_options *options);

/*[[sc::requires_free]]*/ SAUCER_EXPORT char **saucer_desktop_pick_folders(saucer_desktop *,
saucer_picker_options *options);
/*[[sc::requires_free]]*/ SAUCER_DESKTOP_EXPORT char **saucer_desktop_pick_folders(saucer_desktop *,
saucer_picker_options *options);

#ifdef __cplusplus
}
Expand Down
13 changes: 12 additions & 1 deletion private/utils/string.hpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,19 @@
#pragma once

#include "memory.h"

#include <string>

namespace bindings
{
char *alloc(const std::string &);
inline char *alloc(const std::string &value)
{
const auto size = value.size();
char *const rtn = static_cast<char *>(saucer_memory_alloc(size + 1));

value.copy(rtn, size);
rtn[size] = '\0';

return rtn;
}
} // namespace bindings
14 changes: 0 additions & 14 deletions src/string.cpp

This file was deleted.

0 comments on commit 1742a20

Please sign in to comment.