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