Fixed #970: Launch Amiberry binary directly in macOS app bundle
This commit is contained in:
parent
c324ce5dc8
commit
13179ac5bd
4 changed files with 128 additions and 87 deletions
|
@ -4,28 +4,28 @@
|
|||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>LONGVERSION</string>
|
||||
<string>LONGVERSION</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>run_amiberry.zsh</string>
|
||||
<string>Amiberry</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.midwan.amiberry</string>
|
||||
<string>com.blitterstudio.amiberry</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>Amiberry.app</string>
|
||||
<string>Amiberry.app</string>
|
||||
<key>CFBundleIconName</key>
|
||||
<string>AppIcon</string>
|
||||
<string>AppIcon</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>docs/resources/icon.png</string>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<true/>
|
||||
<string>docs/resources/icon.png</string>
|
||||
<key>UIPrerenderedIcon</key>
|
||||
<true/>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>VERSION</string>
|
||||
<string>VERSION</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<string>APPL</string>
|
||||
<key>IFMajorVersion</key>
|
||||
<integer>MAJOR</integer>
|
||||
<integer>MAJOR</integer>
|
||||
<key>IFMinorVersion</key>
|
||||
<integer>MINOR</integer>
|
||||
<integer>MINOR</integer>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -3,70 +3,6 @@
|
|||
CWD_VAR=$(cd "$(dirname "$0")"; pwd)
|
||||
USERDIR=`echo ~`
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Hard Drives" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Hard Drives"
|
||||
fi
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Configurations" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Configurations"
|
||||
fi
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Controllers" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Controllers"
|
||||
fi
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Logfiles" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Logfiles"
|
||||
fi
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Kickstarts" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Kickstarts"
|
||||
fi
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Whdboot" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Whdboot"
|
||||
fi
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Whdboot/game-data" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Whdboot/game-data"
|
||||
fi
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Whdboot/save-data" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Whdboot/save-data"
|
||||
fi
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Whdboot/save-data/Autoboots" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Whdboot/save-data/Autoboots"
|
||||
fi
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Whdboot/save-data/Debugs" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Whdboot/save-data/Debugs"
|
||||
fi
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Whdboot/save-data/Kickstarts" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Whdboot/save-data/Kickstarts"
|
||||
fi
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Whdboot/save-data/Savegames" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Whdboot/save-data/Savegames"
|
||||
fi
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Data/Floppy_Sounds" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Data/Floppy_Sounds"
|
||||
fi
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Savestates" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Savestates"
|
||||
fi
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Screenshots" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Screenshots"
|
||||
fi
|
||||
|
||||
if [[ ! -d "$USERDIR/Documents/Amiberry/Docs" ]]; then
|
||||
mkdir -p "$USERDIR/Documents/Amiberry/Docs"
|
||||
fi
|
||||
|
||||
if [[ ! -f "$USERDIR/Documents/Amiberry/Configurations/amiberry.conf" ]]; then
|
||||
cat $CWD_VAR/../Resources/Configurations/amiberry-osx.conf | sed -e "s#USERDIR#$USERDIR#g" > "$USERDIR/Documents/Amiberry/Configurations/amiberry.conf"
|
||||
fi
|
||||
|
@ -122,7 +58,3 @@ for file in $CWD_VAR/../Resources/Whdboot/**/*(.); do
|
|||
cp $file "$USERDIR/Documents/Amiberry/Whdboot${file##*/Whdboot}"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Running Amiberry"
|
||||
|
||||
$CWD_VAR/Amiberry
|
|
@ -16,9 +16,9 @@ mkdir -p Amiberry.app/Contents/Frameworks
|
|||
mkdir -p Amiberry.app/Contents/Resources
|
||||
# Copy executable into App bundle
|
||||
cp amiberry Amiberry.app/Contents/MacOS/Amiberry
|
||||
# Copy launch script into the bundle
|
||||
cp run_amiberry.zsh Amiberry.app/Contents/MacOS
|
||||
chmod +x Amiberry.app/Contents/MacOS/run_amiberry.zsh
|
||||
# Copy init script into the bundle
|
||||
cp macos_init_amiberry.zsh Amiberry.app/Contents/Resources
|
||||
chmod +x Amiberry.app/Contents/Resources/macos_init_amiberry.zsh
|
||||
# Copy parameter list into the bundle
|
||||
cat Info.plist.template | sed -e "s/LONGVERSION/$LONGVER/" | sed -e "s/VERSION/$VERSION/" | sed -e "s/MAJOR/$MAJOR/" | sed -e "s/MINOR/$MINOR/" > Amiberry.app/Contents/Info.plist
|
||||
# Self-sign binary
|
||||
|
|
|
@ -3118,6 +3118,107 @@ static int get_env_dir( char * path, const char *path_template, const char *envn
|
|||
return ret;
|
||||
}
|
||||
|
||||
void init_macos_amiberry_folders(std::string macos_amiberry_directory)
|
||||
{
|
||||
if (!my_existsdir(macos_amiberry_directory.c_str()))
|
||||
my_mkdir(macos_amiberry_directory.c_str());
|
||||
|
||||
std::string directory = macos_amiberry_directory + "/Hard Drives";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Configurations";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Controllers";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Logfiles";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Kickstarts";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Whdboot";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Whdboot/game-data";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Whdboot/save-data";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Whdboot/save-data/Autoboots";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Whdboot/save-data/Debugs";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Whdboot/save-data/Kickstarts";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Whdboot/save-data/Savegames";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Data";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Data/Floppy_Sounds";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Savestates";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Screenshots";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
|
||||
directory = macos_amiberry_directory + "/Docs";
|
||||
if (!my_existsdir(directory.c_str()))
|
||||
my_mkdir(directory.c_str());
|
||||
}
|
||||
|
||||
#ifdef __MACH__
|
||||
#include <mach-o/dyld.h>
|
||||
void macos_copy_amiberry_files_to_userdir(std::string macos_amiberry_directory)
|
||||
{
|
||||
char exepath[MAX_DPATH];
|
||||
uint32_t size = sizeof exepath;
|
||||
if (_NSGetExecutablePath(exepath, &size) == 0)
|
||||
{
|
||||
std::string directory;
|
||||
size_t last_slash_idx = string(exepath).rfind('/');
|
||||
if (std::string::npos != last_slash_idx)
|
||||
{
|
||||
directory = string(exepath).substr(0, last_slash_idx);
|
||||
}
|
||||
last_slash_idx = directory.rfind('/');
|
||||
if (std::string::npos != last_slash_idx)
|
||||
{
|
||||
directory = directory.substr(0, last_slash_idx);
|
||||
}
|
||||
char command[MAX_DPATH];
|
||||
sprintf(command, "%s/%s", directory.c_str(), "Resources/macos_init_amiberry.zsh");
|
||||
system(command);
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
static void init_amiberry_paths(void)
|
||||
{
|
||||
strncpy(current_dir, start_path_data, MAX_DPATH - 1);
|
||||
|
@ -3143,9 +3244,17 @@ static void init_amiberry_paths(void)
|
|||
snprintf(rp9_path, MAX_DPATH, "%s/rp9/", start_path_data);
|
||||
#ifdef __MACH__
|
||||
// Open amiberry.conf from Application Data directory
|
||||
string macos_home_directory = getenv("HOME");
|
||||
snprintf(amiberry_conf_file, MAX_DPATH, "%s", (macos_home_directory + "/Documents/Amiberry/Configurations/amiberry.conf").c_str());
|
||||
printf("Using configuration: %s\n", (macos_home_directory + "/Documents/Amiberry/Configurations/amiberry.conf").c_str());
|
||||
const std::string macos_home_directory = getenv("HOME");
|
||||
const std::string macos_amiberry_directory = macos_home_directory + "/Documents/Amiberry";
|
||||
if (!my_existsdir(macos_amiberry_directory.c_str()))
|
||||
{
|
||||
// Amiberry home dir is missing, generate it and all directories under it
|
||||
init_macos_amiberry_folders(macos_amiberry_directory);
|
||||
macos_copy_amiberry_files_to_userdir(macos_amiberry_directory);
|
||||
}
|
||||
|
||||
snprintf(amiberry_conf_file, MAX_DPATH, "%s", (macos_amiberry_directory + "/Configurations/amiberry.conf").c_str());
|
||||
write_log("Using configuration: %s\n", (macos_amiberry_directory + "/Configurations/amiberry.conf").c_str());
|
||||
#else
|
||||
snprintf(amiberry_conf_file, MAX_DPATH, "%s/conf/amiberry.conf", start_path_data);
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue