Add MacOS bundle generation (WIP) + Macos build fixes

This commit is contained in:
Anthony Rabine 2024-01-22 16:56:14 +01:00
parent d290affe17
commit 7c9f56cd3b
10 changed files with 115 additions and 7 deletions

8
.gitignore vendored
View file

@ -69,3 +69,11 @@ docs/.vitepress/cache/
docs/.vitepress/dist/ docs/.vitepress/dist/
software/.cache/ software/.cache/
.DS_Store
story-editor/.idea/
story-editor/buildxcode/
story-editor/cmake-build-debug/

10
.vscode/launch.json vendored
View file

@ -14,7 +14,15 @@
"cwd": "${workspaceFolder}/story-editor", "cwd": "${workspaceFolder}/story-editor",
"environment": [], "environment": [],
"externalConsole": false, "externalConsole": false,
"MIMode": "gdb", "linux": {
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb"
},
"osx": {
"MIMode": "lldb",
"miDebuggerPath": "/Users/user936511/.vscode/extensions/ms-vscode.cpptools-1.18.5-darwin-arm64/debugAdapters/lldb-mi/bin/lldb-mi"
},
"setupCommands": [ "setupCommands": [
{ {
"description": "Enable pretty-printing for gdb", "description": "Enable pretty-printing for gdb",

View file

@ -203,6 +203,27 @@ target_include_directories(${STORY_EDITOR_PROJECT} PUBLIC
add_definitions(-DIMGUI_USE_WCHAR32 -DVERSION_MAJOR=${PROJECT_VERSION_MAJOR} -DVERSION_MINOR=${PROJECT_VERSION_MINOR} -DVERSION_PATCH=${PROJECT_VERSION_PATCH}) add_definitions(-DIMGUI_USE_WCHAR32 -DVERSION_MAJOR=${PROJECT_VERSION_MAJOR} -DVERSION_MINOR=${PROJECT_VERSION_MINOR} -DVERSION_PATCH=${PROJECT_VERSION_PATCH})
add_link_options(-static-libgcc -static-libstdc++) add_link_options(-static-libgcc -static-libstdc++)
if (APPLE)
set_target_properties(${PROJECT_NAME} PROPERTIES
LINKER_LANGUAGE CXX
LINK_FLAGS "-Wl,-rpath,@executable_path"
MACOSX_RPATH TRUE
SKIP_BUILD_RPATH FALSE
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_RPATH_USE_LINK_PATH TRUE
)
set_target_properties(${PROJECT_NAME} PROPERTIES
BUNDLE True
MACOSX_BUNDLE_GUI_IDENTIFIER eu.d8s.OpenStoryTeller.StoryEditor.${CUR_TARGET}
MACOSX_BUNDLE_BUNDLE_NAME ${CUR_TARGET}
MACOSX_BUNDLE_BUNDLE_VERSION "0.1"
MACOSX_BUNDLE_SHORT_VERSION_STRING "0.1"
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/bundle.plist.in
)
endif()
target_compile_definitions(${STORY_EDITOR_PROJECT} PUBLIC cimg_display=0) target_compile_definitions(${STORY_EDITOR_PROJECT} PUBLIC cimg_display=0)
target_compile_definitions(${STORY_EDITOR_PROJECT} PUBLIC "$<$<CONFIG:DEBUG>:DEBUG>") target_compile_definitions(${STORY_EDITOR_PROJECT} PUBLIC "$<$<CONFIG:DEBUG>:DEBUG>")
@ -255,4 +276,8 @@ if(WIN32)
set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/story-editor-logo.ico") set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/story-editor-logo.ico")
endif() endif()
if (APPLE)
install_files("." FILES "${SDL2_BIN_DIR}/libSDL2-2.0.0.dylib")
endif()
include(CPack) include(CPack)

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
<key>CFBundleGetInfoString</key>
<string>${MACOSX_BUNDLE_INFO_STRING}</string>
<key>CFBundleIconFile</key>
<string>${MACOSX_BUNDLE_ICON_FILE}</string>
<key>CFBundleIdentifier</key>
<string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleLongVersionString</key>
<string>${MACOSX_BUNDLE_LONG_VERSION_STRING}</string>
<key>CFBundleName</key>
<string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
<key>CSResourcesFileMapped</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
</dict>
</plist>

View file

@ -8,7 +8,7 @@ your use of the corresponding standard functions.
#include "gui.h" #include "gui.h"
#include <stdio.h> #include <stdio.h>
#include <iostream>
#include "imgui_impl_sdl2.h" #include "imgui_impl_sdl2.h"
#include "imgui_impl_sdlrenderer2.h" #include "imgui_impl_sdlrenderer2.h"
@ -24,6 +24,9 @@ your use of the corresponding standard functions.
#include "IconsFontAwesome5_c.h" #include "IconsFontAwesome5_c.h"
#include "qoi.h" #include "qoi.h"
#include "platform_folders.h"
static void glfw_error_callback(int error, const char* description) static void glfw_error_callback(int error, const char* description)
{ {
fprintf(stderr, "GLFW Error %d: %s\n", error, description); fprintf(stderr, "GLFW Error %d: %s\n", error, description);
@ -110,9 +113,16 @@ bool LoadTextureFromFile(const char* filename, Gui::Image &img)
#define MANOLAB_VERSION "1.0" #define MANOLAB_VERSION "1.0"
std::string GetDirectory (const std::string& path)
{
size_t found = path.find_last_of("/\\");
return(path.substr(0, found));
}
Gui::Gui() Gui::Gui()
{ {
m_executablePath = GetDirectory(pf::getExecutablePath());
std::cout << "PATH: " << m_executablePath << std::endl;
} }
@ -161,7 +171,7 @@ bool Gui::Initialize()
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
io.Fonts->AddFontFromFileTTF( "fonts/roboto.ttf", 20); io.Fonts->AddFontFromFileTTF( std::string(m_executablePath + "/fonts/roboto.ttf").c_str(), 20);
{ {
ImFontConfig config; ImFontConfig config;
@ -169,7 +179,7 @@ bool Gui::Initialize()
// config.GlyphMinAdvanceX = 20.0f; // Use if you want to make the icon monospaced // config.GlyphMinAdvanceX = 20.0f; // Use if you want to make the icon monospaced
// config.GlyphOffset.y += 1.0; // config.GlyphOffset.y += 1.0;
static const ImWchar icon_ranges[] = { ICON_MIN_FA, ICON_MAX_FA, 0 }; static const ImWchar icon_ranges[] = { ICON_MIN_FA, ICON_MAX_FA, 0 };
io.Fonts->AddFontFromFileTTF("fonts/fa-solid-900.ttf", 16.0f, &config, icon_ranges); io.Fonts->AddFontFromFileTTF(std::string(m_executablePath + "/fonts/fa-solid-900.ttf").c_str(), 16.0f, &config, icon_ranges);
io.Fonts->Build(); io.Fonts->Build();
} }
@ -179,7 +189,7 @@ bool Gui::Initialize()
config.MergeMode = true; // ATTENTION, MERGE AVEC LA FONT PRECEDENTE !! config.MergeMode = true; // ATTENTION, MERGE AVEC LA FONT PRECEDENTE !!
static const ImWchar icon_ranges_mdi[] = { ICON_MIN_MDI, ICON_MAX_MDI, 0 }; static const ImWchar icon_ranges_mdi[] = { ICON_MIN_MDI, ICON_MAX_MDI, 0 };
io.Fonts->AddFontFromFileTTF("fonts/materialdesignicons-webfont.ttf", 16.0f, &config, icon_ranges_mdi); io.Fonts->AddFontFromFileTTF(std::string(m_executablePath + "/fonts/materialdesignicons-webfont.ttf").c_str(), 16.0f, &config, icon_ranges_mdi);
io.Fonts->Build(); io.Fonts->Build();
} }

View file

@ -50,7 +50,7 @@ public:
static Size GetWindowSize(); static Size GetWindowSize();
private: private:
std::string m_executablePath;
}; };
namespace ImGui { namespace ImGui {

View file

@ -1,3 +1,5 @@
#include <sstream>
#include "media_node.h" #include "media_node.h"
namespace ed = ax::NodeEditor; namespace ed = ax::NodeEditor;

View file

@ -4,6 +4,7 @@
#include <iostream> #include <iostream>
#include <cstdint> #include <cstdint>
#include <algorithm> #include <algorithm>
#include <sstream>
#include "IconsFontAwesome5_c.h" #include "IconsFontAwesome5_c.h"
#include "media_node.h" #include "media_node.h"

View file

@ -164,6 +164,24 @@ static std::string GetAppDataLocal()
return GetKnownWindowsFolder(FOLDERID_LocalAppData, "LocalAppData could not be found"); return GetKnownWindowsFolder(FOLDERID_LocalAppData, "LocalAppData could not be found");
} }
#elif defined(__APPLE__) #elif defined(__APPLE__)
#include <mach-o/dyld.h>
#include <limits.h>
namespace pf {
std::string getExecutablePath()
{
std::string path;
char buf [PATH_MAX];
uint32_t bufsize = PATH_MAX;
if(!_NSGetExecutablePath(buf, &bufsize))
path.assign(buf);
return path;
}
}
#else #else
#include <map> #include <map>
#include <fstream> #include <fstream>

View file

@ -61,6 +61,8 @@ std::string win32_utf16_to_utf8(const wchar_t* wstr);
std::string getDataHome(); std::string getDataHome();
std::string getExecutablePath();
std::string getUserHome(); std::string getUserHome();
/** /**