diff --git a/.gitignore b/.gitignore
index 69fa1d96..e76ce09a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,14 +1,16 @@
+.DS_Store
.cache/
+.vs/
+Info.plist
build*/
compile_commands.json
cspell.json
-.vs/
-support/Dockerfile
-dist/
deps/
-scripts/cleanup.cmd
-scripts/cleanup.sh
-version.rc
-version.cpp
+dist/
override.sh
repertory.iss
+scripts/cleanup.cmd
+scripts/cleanup.sh
+support/Dockerfile
+version.cpp
+version.rc
diff --git a/project.cmake b/project.cmake
index a89eada3..88e2b90d 100644
--- a/project.cmake
+++ b/project.cmake
@@ -1,7 +1,20 @@
set(CMAKE_CXX_FLAGS "-include common.hpp ${CMAKE_CXX_FLAGS}")
+if (PROJECT_IS_DARWIN)
+ configure_file(
+ ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/Info.plist.in
+ ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/Info.plist
+ @ONLY
+ )
+endif()
+
add_project_library(lib${PROJECT_NAME} "" "" "${PROJECT_ADDITIONAL_SOURCES}")
add_project_executable(${PROJECT_NAME} lib${PROJECT_NAME} lib${PROJECT_NAME})
+if (PROJECT_IS_DARWIN)
+ set_target_properties(${PROJECT_NAME} PROPERTIES
+ MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/Info.plist
+ )
+endif()
add_project_test_executable(${PROJECT_NAME}_test lib${PROJECT_NAME} lib${PROJECT_NAME})
diff --git a/repertory/Info.plist.in b/repertory/Info.plist.in
new file mode 100644
index 00000000..f6e9ce14
--- /dev/null
+++ b/repertory/Info.plist.in
@@ -0,0 +1,19 @@
+
+
+
+
+ CFBundleExecutable
+ @PROJECT_NAME@
+ CFBundleIdentifier
+ com.fifthgrid.blockstorage.@PROJECT_NAME@
+ CFBundleName
+ @PROJECT_NAME@
+ CFBundleVersion
+ @PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_REVISION_VERSION@-@PROJECT_RELEASE_ITER@_@PROJECT_GIT_REV@
+ CFBundlePackageType
+ APPL
+ LSUIElement
+
+
+
diff --git a/repertory/repertory/main.cpp b/repertory/repertory/main.cpp
index 24ffdbfc..8b6b3fb3 100644
--- a/repertory/repertory/main.cpp
+++ b/repertory/repertory/main.cpp
@@ -49,12 +49,22 @@ auto main(int argc, char **argv) -> int {
std::ranges::copy(args_span, std::back_inserter(args));
}
+ int ret{0};
+
if (argc == 1) {
+#if defined(__APPLE__)
+ args.push_back("-ui");
+#else // !defined(__APPLE__)
args.push_back("-h");
+#endif // defined(__APPLE__)
}
- int ret{0};
- if (utils::cli::has_option(args, utils::cli::options::ui_option)) {
+ if (utils::cli::has_option(args, utils::cli::options::help_option)) {
+ cli::actions::help(args);
+ } else if (utils::cli::has_option(args,
+ utils::cli::options::version_option)) {
+ cli::actions::version(args);
+ } else if (utils::cli::has_option(args, utils::cli::options::ui_option)) {
ui::mgmt_app_config config{
utils::cli::has_option(args, utils::cli::options::hidden_option),
utils::cli::has_option(args, utils::cli::options::launch_only_option),
@@ -71,7 +81,11 @@ auto main(int argc, char **argv) -> int {
ret = static_cast(exit_code::ui_failed);
} else {
httplib::Server server;
+#if defined(__APPLE__)
+ if (not server.set_mount_point("/ui", "../Resources/web")) {
+#else // !defined(__APPLE__)
if (not server.set_mount_point("/ui", "./web")) {
+#endif // defined(__APPLE__)
ret = static_cast(exit_code::ui_failed);
} else {
ui::handlers handlers(&config, &server);
@@ -133,8 +147,7 @@ auto main(int argc, char **argv) -> int {
}
}
}
- } else if ((prov == provider_type::s3) || (prov == provider_type::sia) ||
- (prov == provider_type::encrypt)) {
+ } else {
std::string data;
res = utils::cli::parse_string_option(
args, utils::cli::options::name_option, data);
@@ -160,32 +173,25 @@ auto main(int argc, char **argv) -> int {
int mount_result{};
if (res == exit_code::success) {
- if (utils::cli::has_option(args, utils::cli::options::help_option)) {
- cli::actions::help(args);
- } else if (utils::cli::has_option(args,
- utils::cli::options::version_option)) {
- cli::actions::version(args);
- } else {
- res = exit_code::option_not_found;
- for (std::size_t idx = 0U;
- (res == exit_code::option_not_found) &&
- (idx < utils::cli::options::option_list.size());
- idx++) {
- try {
- res = cli::actions::perform_action(
- utils::cli::options::option_list[idx], args, data_directory,
- prov, unique_id, user, password);
- } catch (const std::exception &ex) {
- res = exit_code::exception;
- } catch (...) {
- res = exit_code::exception;
- }
+ res = exit_code::option_not_found;
+ for (std::size_t idx = 0U;
+ (res == exit_code::option_not_found) &&
+ (idx < utils::cli::options::option_list.size());
+ idx++) {
+ try {
+ res = cli::actions::perform_action(
+ utils::cli::options::option_list[idx], args, data_directory, prov,
+ unique_id, user, password);
+ } catch (const std::exception &ex) {
+ res = exit_code::exception;
+ } catch (...) {
+ res = exit_code::exception;
}
+ }
- if (res == exit_code::option_not_found) {
- res = cli::actions::mount(args, data_directory, mount_result, prov,
- remote_host, remote_port, unique_id);
- }
+ if (res == exit_code::option_not_found) {
+ res = cli::actions::mount(args, data_directory, mount_result, prov,
+ remote_host, remote_port, unique_id);
}
}
diff --git a/scripts/make_common.sh b/scripts/make_common.sh
index 09c203ed..c43d15a7 100755
--- a/scripts/make_common.sh
+++ b/scripts/make_common.sh
@@ -61,7 +61,9 @@ fi
for APP in ${PROJECT_APP_LIST[@]}; do
if [ "${PROJECT_BUILD_SHARED_LIBS}" == "ON" ]; then
- if [ "${PROJECT_IS_MINGW}" != "1" ]; then
+ if [ "${PROJECT_IS_MINGW}" == "1" ]; then
+ rsync -av --progress "${PROJECT_BUILD_DIR}/build/${APP}${PROJECT_APP_BINARY_EXT}" "${PROJECT_DIST_DIR}/"
+ else
rm "${PROJECT_DIST_DIR}/${APP}${PROJECT_APP_BINARY_EXT}"
if [ "${PROJECT_ENABLE_CURL}" == "ON" ]; then
mv "${PROJECT_DIST_DIR}/cacert.pem" "${PROJECT_DIST_DIR}/bin/cacert.pem"
@@ -77,17 +79,26 @@ export LD_LIBRARY_PATH="\${PROJECT_SCRIPTS_DIR}/lib:\${PROJECT_SCRIPTS_DIR}/lib6
\${PROJECT_SCRIPTS_DIR}/bin/${APP}${PROJECT_APP_BINARY_EXT} \$*
EOF
chmod +x "${PROJECT_DIST_DIR}/${APP}${PROJECT_APP_BINARY_EXT}"
- else
- rsync -av --progress "${PROJECT_BUILD_DIR}/build/${APP}${PROJECT_APP_BINARY_EXT}" "${PROJECT_DIST_DIR}/"
fi
- else
+ elif [ ! -d "${PROJECT_BUILD_DIR}/build/${APP}.app" ]; then
rsync -av --progress "${PROJECT_BUILD_DIR}/build/${APP}${PROJECT_APP_BINARY_EXT}" "${PROJECT_DIST_DIR}/"
fi
done
+if [ -d "${PROJECT_BUILD_DIR}/build/${PROJECT_NAME}.app" ]; then
+ rsync -av --progress "${PROJECT_BUILD_DIR}/build/${PROJECT_NAME}.app/" \
+ "${PROJECT_DIST_DIR}/${PROJECT_NAME}.app/"
+fi
+
if [ -f "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/pubspec.yaml" ]; then
- rsync -av --progress "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/build/web/" \
- "${PROJECT_DIST_DIR}/web/"
+ if [ -d "${PROJECT_DIST_DIR}/${PROJECT_NAME}.app" ]; then
+ rsync -av --progress "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/build/web/" \
+ "${PROJECT_DIST_DIR}/${PROJECT_NAME}.app/Contents/Resources/web/"
+ cp "${PROJECT_DIST_DIR}/cacert.pem" "${PROJECT_DIST_DIR}/${PROJECT_NAME}.app/Contents/MacOS/cacert.pem"
+ else
+ rsync -av --progress "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/build/web/" \
+ "${PROJECT_DIST_DIR}/web/"
+ fi
fi
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
diff --git a/scripts/make_package.sh b/scripts/make_package.sh
index 2a2e3f41..bd22cfe7 100755
--- a/scripts/make_package.sh
+++ b/scripts/make_package.sh
@@ -50,10 +50,12 @@ popd
rsync -av --progress ${PROJECT_DIST_DIR}/ ${TEMP_DIR}/${PROJECT_NAME}/ || error_exit "failed to rsync" 1
for APP in ${PROJECT_APP_LIST[@]}; do
- if [ "${PROJECT_BUILD_SHARED_LIBS}" == "ON" ] && [ "${PROJECT_IS_MINGW}" != "1" ]; then
- strip ${TEMP_DIR}/${PROJECT_NAME}/bin/${APP}${PROJECT_APP_BINARY_EXT}
+ if [ -d "${TEMP_DIR}/${PROJECT_NAME}/${APP}.app" ]; then
+ strip "${TEMP_DIR}/${PROJECT_NAME}/${APP}.app/Contents/MacOS/${APP}${PROJECT_APP_BINARY_EXT}"
+ elif [ "${PROJECT_BUILD_SHARED_LIBS}" == "ON" ] && [ "${PROJECT_IS_MINGW}" != "1" ]; then
+ strip "${TEMP_DIR}/${PROJECT_NAME}/bin/${APP}${PROJECT_APP_BINARY_EXT}"
else
- strip ${TEMP_DIR}/${PROJECT_NAME}/${APP}${PROJECT_APP_BINARY_EXT}
+ strip "${TEMP_DIR}/${PROJECT_NAME}/${APP}${PROJECT_APP_BINARY_EXT}"
fi
done