diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml
index 712dc8d8..545f2ab2 100644
--- a/.github/workflows/cd.yml
+++ b/.github/workflows/cd.yml
@@ -20,8 +20,6 @@ jobs:
- run: sudo apt-get update -q
- run: sudo apt-get install libopenal-dev xorg-dev libgl1-mesa-dev -y --allow-unauthenticated
- run: OS=Linux ARCH=x86_64 VERSION=$VERSION make tar
- - run: make deb_defaults
- - run: go build
- run: OS=Linux ARCH=x86_64 VERSION=$VERSION make deb
- run: sha256sum Ludo-Linux-x86_64-${VERSION}.tar.gz > Ludo-Linux-x86_64-${VERSION}.tar.gz.sha256
@@ -55,8 +53,6 @@ jobs:
- run: export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig/
- run: GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=1 CC=arm-linux-gnueabihf-gcc go build -v
- run: OS=Linux ARCH=arm VERSION=$VERSION make tar
- - run: make deb_defaults
- - run: GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=1 CC=arm-linux-gnueabihf-gcc go build -v
- run: OS=Linux ARCH=arm VERSION=$VERSION make deb
- run: sha256sum Ludo-Linux-arm-${VERSION}.tar.gz > Ludo-Linux-arm-${VERSION}.tar.gz.sha256
@@ -86,7 +82,7 @@ jobs:
- run: security import dev.p12 -k build.keychain -P ${{ secrets.OSXCERTPASS }} -T /usr/bin/codesign && rm dev.p12
- run: security set-key-partition-list -S "apple-tool:,apple:,codesign:" -s -k github build.keychain
- run: OS=OSX ARCH=x86_64 VERSION=$VERSION make dmg
- - run: echo "REQUESTUUID=$(xcrun altool --notarize-app -t osx -f Ludo-OSX-x86_64-${VERSION}.dmg --primary-bundle-id org.libretro.ludo -u ${{ secrets.APPLEID }} -p ${{ secrets.APPLEIDPASS }} -itc_provider ZE9XE938Z2 | awk '/RequestUUID/ { print $NF; }')" >> $GITHUB_ENV
+ - run: echo "REQUESTUUID=$(xcrun altool --notarize-app -t osx -f Ludo-OSX-x86_64-${VERSION}.dmg --primary-bundle-id com.libretro.ludo -u ${{ secrets.APPLEID }} -p ${{ secrets.APPLEIDPASS }} -itc_provider ZE9XE938Z2 | awk '/RequestUUID/ { print $NF; }')" >> $GITHUB_ENV
- run: sleep 180
- run: xcrun altool --notarization-info $REQUESTUUID -u ${{ secrets.APPLEID }} -p ${{ secrets.APPLEIDPASS }} -ascprovider ZE9XE938Z2
- run: xcrun stapler staple Ludo-OSX-x86_64-${VERSION}.dmg
diff --git a/Makefile b/Makefile
index 842c1e50..ba03a75f 100644
--- a/Makefile
+++ b/Makefile
@@ -52,17 +52,16 @@ cores/%_libretro.dylib cores/%_libretro.dll cores/%_libretro.so:
$(APP).app: ludo $(DYLIBS)
mkdir -p $(APP).app/Contents/MacOS
- mkdir -p $(APP).app/Contents/Frameworks
mkdir -p $(APP).app/Contents/Resources/$(APP).iconset
- cp Info.plist $(APP).app/Contents/
+ cp pkg/Info.plist $(APP).app/Contents/
sed -i.bak 's/0.1.0/$(VERSION)/' $(APP).app/Contents/Info.plist
rm $(APP).app/Contents/Info.plist.bak
echo "APPL????" > $(APP).app/Contents/PkgInfo
cp -r database $(APP).app/Contents/Resources
cp -r assets $(APP).app/Contents/Resources
- cp cores/* $(APP).app/Contents/Frameworks
+ cp -r cores $(APP).app/Contents/Resources
codesign --force --options runtime --verbose --timestamp --sign "7069CC8A4AE9AFF0493CC539BBA4FA345F0A668B" \
- --entitlements entitlements.xml $(APP).app/Contents/Frameworks/*.dylib
+ --entitlements pkg/entitlements.xml $(APP).app/Contents/Resources/cores/*.dylib
rm -rf $(APP).app/Contents/Resources/database/.git
rm -rf $(APP).app/Contents/Resources/assets/.git
sips -z 16 16 assets/icon.png --out $(APP).app/Contents/Resources/$(APP).iconset/icon_16x16.png
@@ -76,11 +75,11 @@ $(APP).app: ludo $(DYLIBS)
sips -z 512 512 assets/icon.png --out $(APP).app/Contents/Resources/$(APP).iconset/icon_512x512.png
cp ludo $(APP).app/Contents/MacOS
codesign --force --options runtime --verbose --timestamp --sign "7069CC8A4AE9AFF0493CC539BBA4FA345F0A668B" \
- --entitlements entitlements.xml $(APP).app/Contents/MacOS/ludo
+ --entitlements pkg/entitlements.xml $(APP).app/Contents/MacOS/ludo
iconutil -c icns -o $(APP).app/Contents/Resources/$(APP).icns $(APP).app/Contents/Resources/$(APP).iconset
rm -rf $(APP).app/Contents/Resources/$(APP).iconset
codesign --force --options runtime --verbose --timestamp --sign "7069CC8A4AE9AFF0493CC539BBA4FA345F0A668B" \
- --entitlements entitlements.xml $(APP).app
+ --entitlements pkg/entitlements.xml $(APP).app
empty.dmg:
mkdir -p template
@@ -98,7 +97,7 @@ dmg: empty.dmg $(APP).app
rm -f $(BUNDLENAME)-*.dmg
hdiutil convert empty.dmg -quiet -format UDZO -imagekey zlib-level=9 -o $(BUNDLENAME).dmg
codesign --force --options runtime --verbose --timestamp --sign "7069CC8A4AE9AFF0493CC539BBA4FA345F0A668B" \
- --entitlements entitlements.xml $(BUNDLENAME).dmg
+ --entitlements pkg/entitlements.xml $(BUNDLENAME).dmg
# For Windows
zip: ludo.exe $(DLLS)
@@ -125,30 +124,31 @@ DEB_ARCH = amd64
ifeq ($(ARCH), arm)
DEB_ARCH = armhf
endif
-
-deb_defaults:
- sed -i.bak 's/"\.\/assets"/"\/usr\/local\/share\/ludo\/assets"/' settings/defaults.go
- sed -i.bak 's/"\.\/database"/"\/usr\/local\/share\/ludo\/database"/' settings/defaults.go
- sed -i.bak 's/"\.\/cores"/"\/usr\/local\/lib\/ludo\/cores"/' settings/defaults.go
+DEB_ROOT = ludo_$(VERSION)-1_$(DEB_ARCH)
deb: ludo $(SOBJS)
- mkdir -p ludo_$(VERSION)-1_$(DEB_ARCH)/DEBIAN
- mkdir -p ludo_$(VERSION)-1_$(DEB_ARCH)/usr/local/bin
- mkdir -p ludo_$(VERSION)-1_$(DEB_ARCH)/usr/local/share/ludo
- mkdir -p ludo_$(VERSION)-1_$(DEB_ARCH)/usr/local/lib/ludo
- mkdir -p ludo_$(VERSION)-1_$(DEB_ARCH)/usr/local/share/applications
- mkdir -p ludo_$(VERSION)-1_$(DEB_ARCH)/usr/share/icons/hicolor/1024x1024/apps/
- cp ludo ludo_$(VERSION)-1_$(DEB_ARCH)/usr/local/bin
- cp -r database ludo_$(VERSION)-1_$(DEB_ARCH)/usr/local/share/ludo
- cp -r assets ludo_$(VERSION)-1_$(DEB_ARCH)/usr/local/share/ludo
- cp -r cores ludo_$(VERSION)-1_$(DEB_ARCH)/usr/local/lib/ludo
- cp assets/icon.png ludo_$(VERSION)-1_$(DEB_ARCH)/usr/share/icons/hicolor/1024x1024/apps/ludo.png
- cp ludo.desktop ludo_$(VERSION)-1_$(DEB_ARCH)/usr/local/share/applications
- cp control ludo_$(VERSION)-1_$(DEB_ARCH)/DEBIAN
- sed -i.bak 's/VERSION/$(VERSION)/' ludo_$(VERSION)-1_$(DEB_ARCH)/DEBIAN/control
- sed -i.bak 's/ARCH/$(DEB_ARCH)/' ludo_$(VERSION)-1_$(DEB_ARCH)/DEBIAN/control
- rm ludo_$(VERSION)-1_$(DEB_ARCH)/DEBIAN/control.bak
- dpkg-deb --build ludo_$(VERSION)-1_$(DEB_ARCH)
+ mkdir -p $(DEB_ROOT)/DEBIAN
+ mkdir -p $(DEB_ROOT)/etc
+ mkdir -p $(DEB_ROOT)/usr/bin
+ mkdir -p $(DEB_ROOT)/usr/lib/ludo
+ mkdir -p $(DEB_ROOT)/usr/share/ludo
+ mkdir -p $(DEB_ROOT)/usr/share/applications
+ mkdir -p $(DEB_ROOT)/usr/share/icons/hicolor/1024x1024/apps/
+ touch $(DEB_ROOT)/etc/ludo.toml
+ echo "cores_dir = \"/usr/lib/ludo\"" >> $(DEB_ROOT)/etc/ludo.toml
+ echo "assets_dir = \"/usr/share/ludo/assets\"" >> $(DEB_ROOT)/etc/ludo.toml
+ echo "database_dir = \"/usr/share/ludo/databbase\"" >> $(DEB_ROOT)/etc/ludo.toml
+ cp ludo $(DEB_ROOT)/usr/bin
+ cp cores/* $(DEB_ROOT)/usr/lib/ludo
+ cp -r assets $(DEB_ROOT)/usr/share/ludo
+ cp -r database $(DEB_ROOT)/usr/share/ludo
+ cp assets/icon.png $(DEB_ROOT)/usr/share/icons/hicolor/1024x1024/apps/ludo.png
+ cp pkg/ludo.desktop $(DEB_ROOT)/usr/share/applications
+ cp pkg/control $(DEB_ROOT)/DEBIAN
+ sed -i.bak 's/VERSION/$(VERSION)/' $(DEB_ROOT)/DEBIAN/control
+ sed -i.bak 's/ARCH/$(DEB_ARCH)/' $(DEB_ROOT)/DEBIAN/control
+ rm $(DEB_ROOT)/DEBIAN/control.bak
+ dpkg-deb --build $(DEB_ROOT)
clean:
rm -rf Ludo.app ludo wc *.dmg *.deb $(BUNDLENAME)-* cores/
diff --git a/go.mod b/go.mod
index 3ffed130..646b628b 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,7 @@
module github.com/libretro/ludo
require (
+ github.com/adrg/xdg v0.3.3 // indirect
github.com/cavaliercoder/grab v2.0.0+incompatible
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/disintegration/imaging v1.6.2
diff --git a/go.sum b/go.sum
index 08d4d823..773357e9 100644
--- a/go.sum
+++ b/go.sum
@@ -1,4 +1,6 @@
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/adrg/xdg v0.3.3 h1:s/tV7MdqQnzB1nKY8aqHvAMD+uCiuEDzVB5HLRY849U=
+github.com/adrg/xdg v0.3.3/go.mod h1:61xAR2VZcggl2St4O9ohF5qCKe08+JDmE4VNzPFQvOQ=
github.com/cavaliercoder/grab v2.0.0+incompatible h1:wZHbBQx56+Yxjx2TCGDcenhh3cJn7cCLMfkEPmySTSE=
github.com/cavaliercoder/grab v2.0.0+incompatible/go.mod h1:tTBkfNqSBfuMmMBFaO2phgyhdYhiZQ/+iXCZDzcDsMI=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
diff --git a/history/history.go b/history/history.go
index 29a4e395..fd9a30c2 100644
--- a/history/history.go
+++ b/history/history.go
@@ -8,6 +8,8 @@ import (
"log"
"os"
"path/filepath"
+
+ "github.com/adrg/xdg"
)
// Game represents a game in the history file
@@ -48,12 +50,7 @@ func Push(g Game) {
// Load loads history.csv in memory
func Load() error {
- home, err := os.UserHomeDir()
- if err != nil {
- return err
- }
-
- file, err := os.Open(filepath.Join(home, ".ludo", "history.csv"))
+ file, err := os.Open(filepath.Join(xdg.DataHome, "ludo", "history.csv"))
if err != nil {
return err
}
@@ -83,12 +80,7 @@ func Load() error {
// Save persists the history as a csv file
func Save() error {
- home, err := os.UserHomeDir()
- if err != nil {
- return err
- }
-
- file, err := os.Create(filepath.Join(home, ".ludo", "history.csv"))
+ file, err := os.Create(filepath.Join(xdg.DataHome, "ludo", "history.csv"))
if err != nil {
return err
}
diff --git a/options/options.go b/options/options.go
index 333abdd8..0683a511 100644
--- a/options/options.go
+++ b/options/options.go
@@ -12,6 +12,7 @@ import (
"strings"
"sync"
+ "github.com/adrg/xdg"
"github.com/libretro/ludo/state"
"github.com/libretro/ludo/utils"
"github.com/pelletier/go-toml"
@@ -69,11 +70,6 @@ func (o *Options) Save() error {
o.Lock()
defer o.Unlock()
- home, err := os.UserHomeDir()
- if err != nil {
- return err
- }
-
m := make(map[string]string)
for _, v := range o.Vars {
m[strings.Replace(v.Key, ".", "___", 1)] = v.Choices[v.Choice]
@@ -84,7 +80,7 @@ func (o *Options) Save() error {
}
name := utils.FileName(state.CorePath)
- fd, err := os.Create(filepath.Join(home, ".ludo", name+".toml"))
+ fd, err := os.Create(filepath.Join(xdg.ConfigHome, "ludo", name+".toml"))
if err != nil {
return err
}
@@ -103,13 +99,8 @@ func (o *Options) load() error {
o.Lock()
defer o.Unlock()
- home, err := os.UserHomeDir()
- if err != nil {
- return err
- }
-
name := utils.FileName(state.CorePath)
- b, err := ioutil.ReadFile(filepath.Join(home, ".ludo", name+".toml"))
+ b, err := ioutil.ReadFile(filepath.Join(xdg.ConfigHome, "ludo", name+".toml"))
if err != nil {
return err
}
diff --git a/Info.plist b/pkg/Info.plist
similarity index 95%
rename from Info.plist
rename to pkg/Info.plist
index 1d628e4b..bd3c311b 100644
--- a/Info.plist
+++ b/pkg/Info.plist
@@ -17,7 +17,7 @@
CFBundleVersion
0.1.0
CFBundleIdentifier
- org.libretro.ludo
+ com.libretro.ludo
CFBundleDisplayName
Ludo
CFBundleName
diff --git a/control b/pkg/control
similarity index 100%
rename from control
rename to pkg/control
diff --git a/entitlements.xml b/pkg/entitlements.xml
similarity index 100%
rename from entitlements.xml
rename to pkg/entitlements.xml
diff --git a/ludo.desktop b/pkg/ludo.desktop
similarity index 100%
rename from ludo.desktop
rename to pkg/ludo.desktop
diff --git a/settings/defaults.go b/settings/defaults.go
index ed9a60ba..072615ec 100644
--- a/settings/defaults.go
+++ b/settings/defaults.go
@@ -1,32 +1,12 @@
package settings
import (
- "log"
- "os"
"path/filepath"
- "runtime"
-)
-func coresDir() string {
- coresDir := "./cores"
- // with hardened runtime enabled, dylibs can't be loaded from a relative path
- if runtime.GOOS == "darwin" {
- exe, err := os.Executable()
- if err != nil {
- log.Fatalln(err)
- }
- exeDir := filepath.Dir(exe)
- coresDir = filepath.Join(exeDir, "..", "Frameworks")
- }
- return coresDir
-}
+ "github.com/adrg/xdg"
+)
func defaultSettings() Settings {
- home, err := os.UserHomeDir()
- if err != nil {
- log.Fatalln(err)
- }
-
return Settings{
VideoFullscreen: false,
VideoMonitorIndex: 0,
@@ -78,14 +58,14 @@ func defaultSettings() Settings {
"SNK - Neo Geo Pocket": "mednafen_ngp_libretro",
"Sony - PlayStation": playstationCore,
},
- CoresDirectory: coresDir(),
+ CoresDirectory: "./cores",
AssetsDirectory: "./assets",
DatabaseDirectory: "./database",
- SavestatesDirectory: filepath.Join(home, ".ludo", "savestates"),
- SavefilesDirectory: filepath.Join(home, ".ludo", "savefiles"),
- ScreenshotsDirectory: filepath.Join(home, ".ludo", "screenshots"),
- SystemDirectory: filepath.Join(home, ".ludo", "system"),
- PlaylistsDirectory: filepath.Join(home, ".ludo", "playlists"),
- ThumbnailsDirectory: filepath.Join(home, ".ludo", "thumbnails"),
+ SavestatesDirectory: filepath.Join(xdg.DataHome, "ludo", "savestates"),
+ SavefilesDirectory: filepath.Join(xdg.DataHome, "ludo", "savefiles"),
+ ScreenshotsDirectory: filepath.Join(xdg.DataHome, "ludo", "screenshots"),
+ SystemDirectory: filepath.Join(xdg.DataHome, "ludo", "system"),
+ PlaylistsDirectory: filepath.Join(xdg.DataHome, "ludo", "playlists"),
+ ThumbnailsDirectory: filepath.Join(xdg.DataHome, "ludo", "thumbnails"),
}
}
diff --git a/settings/settings.go b/settings/settings.go
index 42084f8a..b3d6fb87 100644
--- a/settings/settings.go
+++ b/settings/settings.go
@@ -11,6 +11,7 @@ import (
"os"
"path/filepath"
+ "github.com/adrg/xdg"
"github.com/fatih/structs"
"github.com/libretro/ludo/ludos"
"github.com/libretro/ludo/utils"
@@ -67,11 +68,6 @@ func Load() error {
}
}()
- home, err := os.UserHomeDir()
- if err != nil {
- return err
- }
-
// Set default values for settings
Current = Defaults
@@ -84,7 +80,7 @@ func Load() error {
}
}
- b, err := ioutil.ReadFile(filepath.Join(home, ".ludo", "settings.toml"))
+ b, err := ioutil.ReadFile(filepath.Join(xdg.ConfigHome, "ludo", "settings.toml"))
if err != nil {
return err
}
@@ -102,12 +98,7 @@ func Load() error {
// Save saves the current configuration to the home directory
func Save() error {
- home, err := os.UserHomeDir()
- if err != nil {
- return err
- }
-
- err = os.MkdirAll(filepath.Join(home, ".ludo"), os.ModePerm)
+ err := os.MkdirAll(filepath.Join(xdg.ConfigHome, "ludo"), os.ModePerm)
if err != nil {
return err
}
@@ -117,7 +108,7 @@ func Save() error {
return err
}
- fd, err := os.Create(filepath.Join(home, ".ludo", "settings.toml"))
+ fd, err := os.Create(filepath.Join(xdg.ConfigHome, "ludo", "settings.toml"))
if err != nil {
return err
}