51

Re: Сборка под Mac OS

Вроде получилось собрать полностью статикой (x86_64), но без mp3, native-midi и flac (хотя с ним проблем не было, но так, на всякий случай; потом добавлю). В данный момент проверить не могу, т.к. "чистые" маки сейчас заняты. sad  Если есть у кого-нибудь возможность - проверьте пожалуйста.
http://narod.ru/disk/23090899000/Instea … 4.dmg.html

Запускать через терминал!

Позже постараюсь решить проблему со сборкой с mp3 и native-midi.  roll

Re: Сборка под Mac OS

Ух ты smile

Я потом закоммичу Makefile.static для облегчения работы -- может поможет.... У меня почему то так и не получилось добить -- собирается но не запускается smile

53 (edited by .dm 2010-07-25 18:05:31)

Re: Сборка под Mac OS

Изрядно помучившись со сборкой под i386, заметил одну особенность - почему-то никак выходило собрать со статическими libSDL.a и libSDLmain.a, в бинарник всё время пихались динамические библиотеки. Вспомнил, что на 10.6 Cocoa только в 64-х разрядном виде, то снёс Fink, поставил заново, но выбрал "только 64 бита" и попытался снова. На этот раз получилось. Однако пришлось руками собрать libiconv, т.к. Fink собирает его в виде динамических библиотек и SDL_mixer (будь он неладен).

Уже увидел первый глюк - не играет ogg, сыпет: Can't load 'music/part_1.ogg'. Хотя с ним собран.

В принципе, музыка в данный момент не в первой очереди, главное добиться запуска с иконки, а для этого нужно что-то придумать с размещением ресурсов. Я, честно говоря, не силён как делаются программы под Мак, поэтому пока идей нет.

PS. Хотя... Можно настройки класть в "~/Library/Preferences/Instead", а остальную требуху (games, themes...) в "~/Library/Application Support/Instead".
PPS. Треккерную музыку тоже не играет.  sad

Re: Сборка под Mac OS

Если есть возможность узнать путь по которому запускается бинарник - вопрос решится.

Вообще -- может все проще -- может пути нужно не ./games а имя bundla что то там games?
Может быть при запуске приложения в macos x cwd присваетвается bundlу???

55

Re: Сборка под Mac OS

Пошёл курить маны.  cool

56

Re: Сборка под Mac OS

Нашёл парочку ресурсов, где описано как получить пути к исполняемому файлу и ресурсам (каталогу Resources):
http://www.ugolnik.info/?p=624
http://www.idevgames.com/forum/showthread.php?t=15021
http://blog.onesadcookie.com/2007/12/fi … files.html

Re: Сборка под Mac OS

Отлично!
Похоже нам поможет это (из 2-й ссылки),. Как освобожусь гляну повнимательней...

#include <limits.h>
#include <unistd.h>
#include <CoreFoundation/CoreFoundation.h>

...

char resourcePath[PATH_MAX];
CFBundleRef mainBundle;
CFURLRef resourcesDirectoryURL;

mainBundle = CFBundleGetMainBundle();
resourcesDirectoryURL = CFBundleCopyResourcesDirectoryURL(mainBundle);
CFURLGetFileSystemRepresentation(resourcesDirectoryURL, true, (UInt8 *) resourcePath, PATH_MAX);
CFRelease(resourcesDirectoryURL);
chdir(resourcePath);

58

Re: Сборка под Mac OS

Кстати, по третьей ссылке очень доступно написано про текущие рабочие директории (странно что на developer.apple.com я ничего похожего не нашёл):

The current working directory for your application depends on how it was run, and what API you're using:
If your application is using GLUT, the current working directory is your bundle's Resources directory.
If your application is using SDL, the current working directory is the directory containing your application bundle, by default. This is set in SDLMain.m. You may wish to change it (see below).
If you run your application from Xcode, the current working directory is the directory containing your application bundle.
If you run your application from Finder, the current working directory is /
If you run your application from the command-line, the current working directory is the current working directory of the controlling shell.

Re: Сборка под Mac OS

Угу, нам нужно попасть в каталог где лежат games и themes ИЛИ прописать пути в Makefile GAMESPATH, THEMESPATH итд...

60

Re: Сборка под Mac OS

Собственно две новости, хорошая и плохая.  big_smile  Первая - таки-запустилось на чистом маке (звук пока не поправил), вторая - при переходе в полноэкранный режим наступает полная ж... sad Начинается полный сюр - курсор двоится, куда перемещается и на каком пункте меню он стоит понять невозможно, экран мерцает (при движении мышкой)... Но самая большая проблема, это то что невозможно выйти из полноэкранного режима, да и вообще невозможно выйти из программы - стандартные маковские (да и не только) комбинации типа Cmd+Q, Cmd+F (ну это понятно) либо Ctrl+Q, Ctrl+F (а вот это нет) не работают, навигация по меню с помощью клавиатуры отсутствует напрочь! Кое-как получилось мышкой переключить режим и нажать применить, но впечатление оставило...  neutral

Теперь отхожу от пережитого шока.

Re: Сборка под Mac OS

Думаю, результат не плохой. В крайнем случае откажемся от fs, но мне кажется еще не все потеряно с fs.

Идеи:

1. Поиграться с SDL_DOUBLEBUF (убрать?) и 32 бита -> на 24.
2. Убрать строку в main.c: putenv("SDL_MOUSE_RELATIVE=0");

Выход: alt-q
fullscreen: alt-enter

62

Re: Сборка под Mac OS

Сейчас попробую и отпишусь. wink

63

Re: Сборка под Mac OS

Первое помогло - убрал SDL_DOUBLEBUF. Второе - вроде бы ничего не изменилось, только по ощущениям лучше с этой настройкой, чем без неё.  roll  Спасибо!

Может до выходных ещё успею немножко поковыряться и наконец добить музыку, ведь с динамическими библиотеками она работала!

PS. И эта... А красивая полноразмерная иконка есть?

Re: Сборка под Mac OS

в icons вроде 128x128?

Re: Сборка под Mac OS

А что сейчас с бандлом? Что вообще стоит закоммитить в svn? DOUBLEBUF?
Переход в каталог с бандлом?

66

Re: Сборка под Mac OS

Да, иконку желательно хотя бы 128x128, но чтоб включала в себя все размеры - и 96 и 48 и ниже.

Пока нужно убрать SDL_DOUBLEBUF (сделать так же ifdef'ами на __APPLE__), а бандл будет выглядеть вот так:

Instead.app / Contents /
                                  /Info.plist
                                  /MacOS/sdl-instead
                                  /Resources/themes
                                  /Resources/games
                                  /Resources/...
                                  /Resources/instead.icns

Соответственно и путь для ресурсов нужно получать как: working_directory/../Resources/. А так же желательно сделать чтоб настройки сохранялись в ~/Library/Preferences/Instead, а новые игры, темы, добавлялись в ~/Library/Application Support/Instead.

Re: Сборка под Mac OS

Не совсем понял насчет пути к ресурсам.
Нужно ли менять код или достаточно сменить define путей?
На что их менять?
тк working_dir/../resources это же и есть resources???

P.S. DOUBLEBUF закоммитил

68

Re: Сборка под Mac OS

Я думаю, достаточно define изменить.
А насчёт вот этого:

working_directory/../Resources/

Это я про то что если вы будете вычислять путь к Resources через путь к исполняемому файлу не через api-шные функции.

PS. Извиняюсь за сумбурность ответов.  roll

69

Re: Сборка под Mac OS

Заметил ещё один глюк - если Instead запускается сразу в полноэкранном режиме, то положение курсора находится возле левого края и может перемещаться только вертикально. Помогает переключение с полноэкранного в маленькое окошко, затем обратно. Судя по всему вот эта строчка всё портит:

putenv("SDL_MOUSE_RELATIVE=0");

Re: Сборка под Mac OS

Да -- это нужно в линукс. Я писал про нее выше -- отрубаем в macos версии?

71

Re: Сборка под Mac OS

Извиняюсь, был не прав - убирание этой строчки ничего не дало.

72

Re: Сборка под Mac OS

Всё, с музыкой разобрался. Теперь жду когда Вы добавите код, для определения каталога ресурсов и можно собирать релиз.  smile

Re: Сборка под Mac OS

Здорово! А тот код что на 2-й странице был не подошел? Или нужно просто эксперимент сделать?

Тогда мне нужно полностью понять расположение каталогов бандла в MacOS X и вывести текущий каталог при запуске ярлыком. Или, если я правильно все понял (перечитав тему), сразу попробовать задать THEMESPATH и GAMESPATH, может сработает smile

DATAPATH=../Resources
STEADPATH=$(DATAPATH)/stead
THEMESPATH=$(DATAPATH)/themes
GAMESPATH=$(DATAPATH)/games
ICONPATH=$(DATAPATH)/icon
LANGPATH=$(DATAPATH)/languages

P.S. А как трекерная музыка?

74

Re: Сборка под Mac OS

big_smile Так я ж вроде говорил, что не программист.  roll Скажите куда этот код воткнуть и в какую переменную записать то что возвращает процедура и я попробую.

Треккерная тоже играет.  wink  Музыку проверял на Коте и Зеркале.

Для наглядности выложил пустой бандл:
http://narod.ru/disk/23283540000/Instead.zip.html
В каталоге MacOS лежит исполняемый файл.

Если задавать THEMESPATH и GAMESPATH как "../Resources", то не сработает. Помните что было написано про запуск программы из Finder?

If you run your application from Finder, the current working directory is /

Re: Сборка под Mac OS

Тогда попробовать воткнуть код в main.c:

В начало:

#include <limits.h>
#include <unistd.h>
#include <CoreFoundation/CoreFoundation.h>

void macos_chdir(void) {
    char resourcePath[PATH_MAX];
    CFBundleRef mainBundle;
    CFURLRef resourcesDirectoryURL;

    mainBundle = CFBundleGetMainBundle();
    resourcesDirectoryURL = CFBundleCopyResourcesDirectoryURL(mainBundle);
    CFURLGetFileSystemRepresentation(resourcesDirectoryURL, true, (UInt8 *) resourcePath, PATH_MAX);
    CFRelease(resourcesDirectoryURL);
    chdir(resourcePath);
    return;
}

И в функции main, перед ifdef _USE_GTK вписать:
   macos_chdir();

THEMESPATH  и GAMESPATH при этом вернуть назад как были. (./)

P.S. Здорово! Еще бы сделать file open, но это можно в будущем.