diff --git a/src/lib-cpp/build.rs b/src/lib-cpp/build.rs index 842af708..06de7903 100644 --- a/src/lib-cpp/build.rs +++ b/src/lib-cpp/build.rs @@ -2,6 +2,9 @@ fn main() { cxx_build::bridge("src/lib.rs") .file("src/bridge.cc") .flag_if_supported("/std:c++17") + .flag_if_supported("/DEF:src/lib.def") + .flag_if_supported("/FORCE:UNRESOLVED") + // .warnings_into_errors(true) .std("c++17") .compile("velopack_libc"); @@ -9,4 +12,5 @@ fn main() { println!("cargo:rerun-if-changed=src/lib.rs"); println!("cargo:rerun-if-changed=src/bridge.hpp"); println!("cargo:rerun-if-changed=src/bridge.cc"); + println!("cargo:rustc-link-arg=/WHOLEARCHIVE:velopack_libc.lib"); } \ No newline at end of file diff --git a/src/lib-cpp/include/Velopack.h b/src/lib-cpp/include/Velopack.h index 0ccf1fc6..7c512113 100644 --- a/src/lib-cpp/include/Velopack.h +++ b/src/lib-cpp/include/Velopack.h @@ -1,7 +1,45 @@ -#ifndef VELOPACK_HPP -#define VELOPACK_HPP +#ifndef VELOPACK_H +#define VELOPACK_H + +#ifdef _WIN32 +#define DLL_EXPORT __declspec(dllexport) +#else +#define DLL_EXPORT __attribute__((visibility("default"))) __attribute__((used)) +#endif + +#ifdef __cplusplus +extern "C" { +#endif typedef void* update_manager_t; +typedef struct { + bool AllowVersionDowngrade; + char* ExplicitChannel; +} update_options_t; -#endif // VELOPACK_HPP \ No newline at end of file +typedef struct { + char* RootAppDir; + char* UpdateExePath; + char* PackagesDir; + char* ManifestPath; + char* CurrentBinaryDir; + bool IsPortable; +} locator_config_t; + +DLL_EXPORT update_manager_t velopack_new_update_manager(const char* url_or_path, const update_options_t* options, const locator_config_t* locator = 0); +//fn bridge_get_current_version(manager: &UpdateManagerOpaque) -> String; +//fn bridge_get_app_id(manager: &UpdateManagerOpaque) -> String; +//fn bridge_is_portable(manager: &UpdateManagerOpaque) -> bool; +//fn bridge_update_pending_restart(manager: &UpdateManagerOpaque) -> AssetOption; +//fn bridge_check_for_updates(manager: &UpdateManagerOpaque) -> Result; +//fn bridge_download_update(manager: &UpdateManagerOpaque, to_download: UpdateInfoDto, progress: UniquePtr) -> Result<()>; +//fn bridge_wait_exit_then_apply_update(manager: &UpdateManagerOpaque, to_download: AssetDto, silent: bool, restart: bool, restart_args: Vec) -> Result<()>; +//fn bridge_appbuilder_run(cb: UniquePtr, custom_args: StringArrayOption, locator: LocatorConfigOption, auto_apply: bool); +//fn bridge_set_logger_callback(cb: UniquePtr); + +#ifdef __cplusplus +} +#endif + +#endif // VELOPACK_H \ No newline at end of file diff --git a/src/lib-cpp/src/bridge.cc b/src/lib-cpp/src/bridge.cc index 1b343ff2..0cc1f2c4 100644 --- a/src/lib-cpp/src/bridge.cc +++ b/src/lib-cpp/src/bridge.cc @@ -1,2 +1,7 @@ #include "velopack_libc/include/Velopack.h" -#include "velopack_libc/src/bridge.hpp" \ No newline at end of file +#include "velopack_libc/src/bridge.hpp" + +DLL_EXPORT update_manager_t velopack_new_update_manager(const char* url_or_path, const update_options_t* options, const locator_config_t* locator) +{ + return 0; +} \ No newline at end of file diff --git a/src/lib-cpp/src/lib.def b/src/lib-cpp/src/lib.def new file mode 100644 index 00000000..fad966b8 --- /dev/null +++ b/src/lib-cpp/src/lib.def @@ -0,0 +1,3 @@ +LIBRARY velopack_libc +EXPORTS + velopack_new_update_manager diff --git a/src/lib-cpp/src/lib.rs b/src/lib-cpp/src/lib.rs index 87fb6f27..2e6a45d7 100644 --- a/src/lib-cpp/src/lib.rs +++ b/src/lib-cpp/src/lib.rs @@ -289,9 +289,6 @@ fn bridge_appbuilder_run(cb: cxx::UniquePtr, custom_ar app = app.set_args(custom_args.data); } - let _ = log::set_logger(&LOGGER); - log::set_max_level(log::LevelFilter::Trace); - app.run(); } @@ -346,6 +343,9 @@ fn get_logger() -> Option<*mut ffi::LoggerCallbackManager> { } fn bridge_set_logger_callback(cb: cxx::UniquePtr) { + let _ = log::set_logger(&LOGGER); + log::set_max_level(log::LevelFilter::Trace); + let cb = cb.into_raw(); store_logger(cb); } \ No newline at end of file