From f24309f1821f40f970175856ec17a98b6e3d5e65 Mon Sep 17 00:00:00 2001 From: Tim Jagenberg Date: Wed, 14 May 2025 22:19:42 +0200 Subject: [PATCH] Cross platform file location and build --- .gitignore | 2 +- build.sh | 22 ++++++++++++++++++++++ main.go | 38 ++++++++++++++++++++++++++++---------- 3 files changed, 51 insertions(+), 11 deletions(-) create mode 100755 build.sh diff --git a/.gitignore b/.gitignore index c3b46bc..d163863 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -memory-mcp +build/ \ No newline at end of file diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..120396a --- /dev/null +++ b/build.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Create a build directory if it doesn't exist +mkdir -p build + +# Build for Linux +GOOS=linux GOARCH=amd64 go build -o build/memory-mcp-linux-amd64 +echo "Built for Linux (amd64)" + +# Build for Windows +GOOS=windows GOARCH=amd64 go build -o build/memory-mcp-windows-amd64.exe +echo "Built for Windows (amd64)" + +# Build for macOS (Intel) +GOOS=darwin GOARCH=amd64 go build -o build/memory-mcp-darwin-amd64 +echo "Built for macOS (Intel/amd64)" + +# Build for macOS (Apple Silicon) +GOOS=darwin GOARCH=arm64 go build -o build/memory-mcp-darwin-arm64 +echo "Built for macOS (Apple Silicon/arm64)" + +echo "All builds completed successfully!" \ No newline at end of file diff --git a/main.go b/main.go index 41829c6..f70ecfd 100644 --- a/main.go +++ b/main.go @@ -25,24 +25,42 @@ type Memory struct { // NewMemoryManager creates a new memory manager func NewMemoryManager() (*MemoryManager, error) { - // Get XDG_STATE_HOME or use default - stateHome := os.Getenv("XDG_STATE_HOME") - if stateHome == "" { - homeDir, err := os.UserHomeDir() - if err != nil { - return nil, fmt.Errorf("failed to get home directory: %w", err) + // Get application data directory in a cross-platform way + var appDataDir string + + // Try to get the directory based on OS-specific environment variables + if dir := os.Getenv("XDG_STATE_HOME"); dir != "" { + // Linux with XDG + appDataDir = filepath.Join(dir, "memory-mcp") + } else if dir := os.Getenv("APPDATA"); dir != "" { + // Windows + appDataDir = filepath.Join(dir, "memory-mcp") + } else if dir := os.Getenv("HOME"); dir != "" { + // macOS or Linux fallback + if _, err := os.Stat(filepath.Join(dir, "Library")); err == nil { + // macOS likely + appDataDir = filepath.Join(dir, "Library", "Application Support", "memory-mcp") + } else { + // Linux fallback + appDataDir = filepath.Join(dir, ".local", "state", "memory-mcp") + } + } else { + // Last resort, use current directory + var err error + appDataDir, err = os.Getwd() + if err != nil { + return nil, fmt.Errorf("failed to determine app data directory: %w", err) } - stateHome = filepath.Join(homeDir, ".local", "state") } // Create directory if it doesn't exist - err := os.MkdirAll(stateHome, 0755) + err := os.MkdirAll(appDataDir, 0755) if err != nil { - return nil, fmt.Errorf("failed to create state directory: %w", err) + return nil, fmt.Errorf("failed to create app data directory: %w", err) } return &MemoryManager{ - filePath: filepath.Join(stateHome, "memories.txt"), + filePath: filepath.Join(appDataDir, "memories.txt"), }, nil }