diff --git a/.gitignore b/.gitignore
index 1a35aadd..27048dc0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@
*.dylib
*.app
*.dmg
+dosdiskbrowser
hxcfe
bmptoh
hxcfloppyemulator
diff --git a/HxCFloppyEmulator_cmdline/build/Makefile b/HxCFloppyEmulator_cmdline/build/Makefile
index 7a787e4f..f0ee9ce3 100644
--- a/HxCFloppyEmulator_cmdline/build/Makefile
+++ b/HxCFloppyEmulator_cmdline/build/Makefile
@@ -38,8 +38,10 @@ LIBUSBHXCFE = libusbhxcfe.so
ifeq ($(TARGET), Darwin)
MACOSX_ARCH ?= -arch arm64 -arch x86_64
MACOSX_MIN_VER ?= 10.9
+ # Allow the CLI to run from the App bundle or from somewhere like /usr/local/bin (with libs in /usr/local/lib)
+ RPATHS = -Wl,-rpath,@executable_path/../Frameworks,-rpath,@executable_path/../lib
CFLAGS += ${MACOSX_ARCH} -mmacosx-version-min=${MACOSX_MIN_VER}
- LDFLAGS += -lc -lm -ldl -lpthread ${MACOSX_ARCH} -mmacosx-version-min=${MACOSX_MIN_VER}
+ LDFLAGS += -lc -lm -ldl -lpthread ${MACOSX_ARCH} -mmacosx-version-min=${MACOSX_MIN_VER} ${RPATHS}
LIBHXCFE = libhxcfe.dylib
LIBUSBHXCFE = libusbhxcfe.dylib
endif
diff --git a/HxCFloppyEmulator_software/build/Makefile b/HxCFloppyEmulator_software/build/Makefile
index 87a12822..ff540a86 100644
--- a/HxCFloppyEmulator_software/build/Makefile
+++ b/HxCFloppyEmulator_software/build/Makefile
@@ -93,8 +93,10 @@ endif
ifeq ($(TARGET), Darwin)
MACOSX_ARCH ?= -arch arm64 -arch x86_64
MACOSX_MIN_VER ?= 10.9
+ # For the GUI application, libraries will always be in the Frameworks directory.
+ RPATHS = -Wl,-rpath,@executable_path/../Frameworks
CFLAGS += -DOSX ${MACOSX_ARCH} -mmacosx-version-min=${MACOSX_MIN_VER}
- LDFLAGS += -lc -lm -ldl -lpthread -framework Cocoa -framework AudioToolBox -framework UniformTypeIdentifiers ${MACOSX_ARCH} -mmacosx-version-min=${MACOSX_MIN_VER}
+ LDFLAGS += -lc -lm -ldl -lpthread -framework Cocoa -framework AudioToolBox -framework UniformTypeIdentifiers ${MACOSX_ARCH} -mmacosx-version-min=${MACOSX_MIN_VER} ${RPATHS}
LIBHXCFE = libhxcfe.dylib
LIBUSBHXCFE = libusbhxcfe.dylib
else
diff --git a/build/Makefile b/build/Makefile
index 438ce6a0..aa619b13 100644
--- a/build/Makefile
+++ b/build/Makefile
@@ -48,7 +48,7 @@ mrproper:
-rm -rf *.dylib
-rm -rf *.dmg
-rm -rf *.app
- -rm -rf hxcfe_cmdline
+ -rm -rf dosdiskbrowser
-rm -rf hxcfloppyemulator
-rm -f hxcfe
-rm -rf Debug_*
diff --git a/build/maccreatebundle b/build/maccreatebundle
index 6a0b6863..b88537f3 100755
--- a/build/maccreatebundle
+++ b/build/maccreatebundle
@@ -1,30 +1,39 @@
#!/usr/bin/env bash
-export VERSION=`grep "define STR_FILE_VERSION2" version.h | cut -f2 -d\"`
+VERSION=`grep "define STR_FILE_VERSION2" version.h | cut -f2 -d\"`
-if [ "$1" = "HXCSOFT" ]; then
-export NAME="HxCFloppyEmulator"
-export DMGNAME="HxCFloppyEmulator"
-
-export CLI_PATH="hxcfe_cmdline"
-export CLI_EXEC="hxcfe"
-
-export GUI_PATH="HxCFloppyEmulator.app"
-export GUI_EXEC="hxcfloppyemulator"
+case "$1" in
+ HXCSOFT)
+ NAME="HxCFloppyEmulator"
+ DMGNAME="HxCFloppyEmulator"
+ INSTALL_PATH="HxCFloppyEmulator.app"
+ LIBS="libhxcfe.dylib libusbhxcfe.dylib"
+ GUI_EXEC="hxcfloppyemulator"
+ CLI_EXEC="hxcfe"
+ ;;
+ DOSDISKBROWSER)
+ NAME="DosDiskBrowser"
+ DMGNAME="DosDiskBrowser"
+ INSTALL_PATH="DosDiskBrowser.app"
+ LIBS="libhxcfe.dylib"
+ GUI_EXEC="dosdiskbrowser"
+ CLI_EXEC=""
+ ;;
+ *)
+ echo "Usage: $0 {HXCSOFT|DOSDISKBROWSER}"
+ exit 1
+ ;;
+esac
echo Creating App bundle : ${NAME}
-mkdir -p ${CLI_PATH}/{Frameworks,App}
-install hxcfe ${CLI_PATH}/App/${CLI_EXEC}
-install libhxcfe.dylib libusbhxcfe.dylib ${CLI_PATH}/Frameworks
+mkdir -p ${INSTALL_PATH}/Contents/{Resources,MacOS,Frameworks}
-mkdir -p ${GUI_PATH}/Contents/{Resources,MacOS,Frameworks}
+echo APPLnone > ${INSTALL_PATH}/Contents/PkgInfo
+iconutil --convert icns --output ${INSTALL_PATH}/Contents/Resources/icons.icns ../HxCFloppyEmulator_software/sources/mac/icons/hxcfloppyemulator.iconset/
+install ${GUI_EXEC} ${CLI_EXEC} ${INSTALL_PATH}/Contents/MacOS
+install ${LIBS} ${INSTALL_PATH}/Contents/Frameworks
-echo APPLnone > ${GUI_PATH}/Contents/PkgInfo
-iconutil --convert icns --output ${GUI_PATH}/Contents/Resources/icons.icns ../HxCFloppyEmulator_software/sources/mac/icons/hxcfloppyemulator.iconset/
-install hxcfloppyemulator ${GUI_PATH}/Contents/MacOS/${GUI_EXEC}
-install libhxcfe.dylib libusbhxcfe.dylib ${GUI_PATH}/Contents/Frameworks
-
-cat << EOF > ${GUI_PATH}/Contents/info.plist
+cat << EOF > ${INSTALL_PATH}/Contents/info.plist
@@ -47,51 +56,22 @@ cat << EOF > ${GUI_PATH}/Contents/info.plist
EOF
-hdiutil create ${DMGNAME}.dmg -srcfolder ${CLI_PATH} -srcfolder ${GUI_PATH} -ov -volname ${DMGNAME}
+if [ -n "${CLI_EXEC}" ]; then
-fi
+cat << EOF > ${INSTALL_PATH}/Contents/MacOS/README
+${CLI_EXEC} is the command line version of ${NAME}.
+It can run from here, or be installed to /usr/local/bin or any other convenient directory \
+in your PATH.
+It will look for its libraries (${LIBS}) in ../lib or ../Frameworks relative to the executable.
-if [ "$1" = "DOSDISKBROWSER" ]; then
-
-export NAME="DosDiskBrowser"
-export DMGNAME="DosDiskBrowser"
-
-export GUI_PATH="DosDiskBrowser.app"
-export GUI_EXEC="dosdiskbrowser"
-
-echo Creating App bundle : ${NAME}
-
-mkdir -p ${GUI_PATH}/Contents/{Resources,MacOS,Frameworks}
-
-echo APPLnone > ${GUI_PATH}/Contents/PkgInfo
-iconutil --convert icns --output ${GUI_PATH}/Contents/Resources/icons.icns ../HxCFloppyEmulator_software/sources/mac/icons/hxcfloppyemulator.iconset/
-install dosdiskbrowser ${GUI_PATH}/Contents/MacOS/${GUI_EXEC}
-install libhxcfe.dylib ${GUI_PATH}/Contents/Frameworks
-
-cat << EOF > ${GUI_PATH}/Contents/info.plist
-
-
-
-
- CFBundleIdentifier
- com.hxc2001.${GUI_EXEC}
- CFBundleName
- ${NAME}
- CFBundlePackageType
- APPL
- CFBundleVersion
- 1
- CFBundleShortVersionString
- ${VERSION}
- CFBundleIconFile
- icons.icns
- CFBundleSignature
- none
-
-
+To use SPS CapsLib / CAPSImage for IPF support, install it in one of \
+the following locations :
+- the same directory as libhxcfe.dylib
+- /Library/Frameworks
+- /usr/local/lib
+and make sure the SPSCAPS_LIB_NAME internal parameter is set to the correct name.
EOF
-hdiutil create ${DMGNAME}.dmg -srcfolder ${GUI_PATH} -ov -volname ${DMGNAME}
-
fi
+hdiutil create ${DMGNAME}.dmg -srcfolder ${INSTALL_PATH} -ov -volname ${DMGNAME}
diff --git a/libhxcfe/build/Makefile b/libhxcfe/build/Makefile
index 67565dd2..ed93bf52 100644
--- a/libhxcfe/build/Makefile
+++ b/libhxcfe/build/Makefile
@@ -73,8 +73,11 @@ endif
ifeq ($(TARGET), Darwin)
MACOSX_ARCH ?= -arch arm64 -arch x86_64
MACOSX_MIN_VER ?= 10.9
+ # Search paths for other dylibs (like CAPSImage)
+ # @loader_path = same directory as this lib.
+ RPATHS = -Wl,-rpath,@loader_path,-rpath,/Library/Frameworks,-rpath,/usr/local/lib
CFLAGS += ${MACOSX_ARCH} -mmacosx-version-min=${MACOSX_MIN_VER}
- LDFLAGS += -lc -lm -ldl ${MACOSX_ARCH} -dynamiclib -current_version 2.0 -install_name @executable_path/../Frameworks/libhxcfe.dylib -mmacosx-version-min=${MACOSX_MIN_VER}
+ LDFLAGS += -lc -lm -ldl ${MACOSX_ARCH} -dynamiclib -current_version 2.0 -install_name @rpath/libhxcfe.dylib -mmacosx-version-min=${MACOSX_MIN_VER} ${RPATHS}
EXEC = libhxcfe.dylib
endif
diff --git a/libhxcfe/sources/floppy_loader.c b/libhxcfe/sources/floppy_loader.c
index fb3f4886..77d789bd 100644
--- a/libhxcfe/sources/floppy_loader.c
+++ b/libhxcfe/sources/floppy_loader.c
@@ -134,7 +134,7 @@ HXCFE* hxcfe_init(void)
#if defined(WIN32)
hxcfe_execScriptLine( hxcfe, "set SPSCAPS_LIB_NAME CAPSImg.dll" );
#elif __APPLE__
- hxcfe_execScriptLine( hxcfe, "set SPSCAPS_LIB_NAME CAPSImage.framework/CAPSImage,CAPSImg.framework/CAPSImg" );
+ hxcfe_execScriptLine( hxcfe, "set SPSCAPS_LIB_NAME @rpath/CAPSImage.framework/CAPSImage,@rpath/CAPSImg.framework/CAPSImg" );
#else
hxcfe_execScriptLine( hxcfe, "set SPSCAPS_LIB_NAME libcapsimage.so.5,libcapsimage.so.5.1,libcapsimage.so" );
#endif
diff --git a/libusbhxcfe/build/Makefile b/libusbhxcfe/build/Makefile
index c97f29ef..7e86cd41 100644
--- a/libusbhxcfe/build/Makefile
+++ b/libusbhxcfe/build/Makefile
@@ -66,7 +66,9 @@ ifeq ($(TARGET), Darwin)
MACOSX_ARCH ?= -arch arm64 -arch x86_64
MACOSX_MIN_VER ?= 10.9
CFLAGS += ${MACOSX_ARCH} -mmacosx-version-min=${MACOSX_MIN_VER}
- LDFLAGS += -lc -lm -ldl ${MACOSX_ARCH} -dynamiclib -current_version 2.0 -install_name @executable_path/../Frameworks/libusbhxcfe.dylib -mmacosx-version-min=${MACOSX_MIN_VER}
+ # Load libhxcfe from the same directory as this library.
+ RPATHS = -Wl,-rpath,@loader_path
+ LDFLAGS += -lc -lm -ldl ${MACOSX_ARCH} -dynamiclib -current_version 2.0 -install_name @rpath/libusbhxcfe.dylib -mmacosx-version-min=${MACOSX_MIN_VER} ${RPATHS}
EXEC = libusbhxcfe.dylib
endif