VCMI for macOS

Thanks for your response.

Well, I checked the installer with two other ISO files downloaded from different Internet source and both failed, so I just gave up for now :stuck_out_tongue:

Could you please provide links to those other iso images?

By the way OS X prebuilt libraries link seems to be broken: download.vcmi.eu/xcode-pack.zip

Fixed. Sorry for delay.

stopiccot, same problem with iso’s from dl.rutracker.org/forum/dl.php?t=4435743
rutracker.org/forum/viewtopic.php?t=4435743

It turns out that different Heroes 3 ISO files can have different internal file layout. I’ll apply fix for your ISO but it will be released only with 0.96 version. For now I suggest to use installer from gog.com. It should be working :slight_smile:

Fixed in master

Hey, sorry to bother guys,

when I want to compile the vcmi in my air following the build note:

and get this error, sorry I am not very familiar with C++ and make build script, but I start to learn it. :stuck_out_tongue:

it seems missing sparkle path, where should i put the path?

Hi. Can’t tell OSX specifics but normally you need to either:

a) Pass paths via call to cmake, like this:
cmake -DSPARKLE_FRAMEWORK=“path/to/sparkle” -DSPARKLE_INCLUDE_DIR=“path/to/include”
(cmake remembers all variables so you only need to set them once)

b) Set variables via cmake-gui tool - start tool, search for sparkle paths, set them to correct values. Don’t know if this tool is available on OSX or this is something Linux-specific.

Hi!

On OS X sdl2 doesn’t link for me, although I have sdl2 installed with homebrew. Any help would be appreciated.

cmake:

laptop% cmake -G Xcode .. -DENABLE_LAUNCHER=OFF
-- The C compiler identification is AppleClang 6.0.0.6000051
-- The CXX compiler identification is AppleClang 6.0.0.6000051
CMake Warning at /usr/local/Cellar/cmake/3.0.2/share/cmake/Modules/Platform/Darwin.cmake:179 (message):
  Ignoring CMAKE_OSX_SYSROOT value:

   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk

  because the directory does not exist.
Call Stack (most recent call first):
  /usr/local/Cellar/cmake/3.0.2/share/cmake/Modules/CMakeSystemSpecificInformation.cmake:36 (include)
  CMakeLists.txt:1 (project)


-- Check for working C compiler using: Xcode
-- Check for working C compiler using: Xcode -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler using: Xcode
-- Check for working CXX compiler using: Xcode -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Looking for shm_open in rt
-- Looking for shm_open in rt - not found
-- Looking for dlopen in dl
-- Looking for dlopen in dl - found
-- Boost version: 1.51.0
-- Found the following Boost libraries:
--   filesystem
--   locale
--   program_options
--   system
--   thread
-- Found ZLIB: /usr/lib/libz.dylib (found version "1.2.5")
-- Found PkgConfig: /usr/local/bin/pkg-config (found version "0.28")
-- checking for module 'libavcodec'
--   found libavcodec, version 56.1.100
-- checking for module 'libavformat'
--   found libavformat, version 56.4.101
-- checking for module 'libavdevice'
--   found libavdevice, version 56.0.100
-- checking for module 'libavutil'
--   found libavutil, version 54.7.100
-- checking for module 'libswscale'
--   found libswscale, version 3.0.100
-- checking for module 'libpostproc'
--   found libpostproc, version 53.0.100
-- Found FFmpeg: /Volumes/kuglee/vcmi/lib/libavcodec.a;/Volumes/kuglee/vcmi/lib/libavformat.a;/Volumes/kuglee/vcmi/lib/libavutil.a;/Volumes/kuglee/vcmi/lib/libswscale.a;-framework VideoDecodeAcceleration -framework CoreVideo -lbz2
-- checking for module 'minizip'
--   found minizip, version 1.2.8
-- Found MINIZIP: /usr/local/Cellar/minizip/1.1/lib/libminizip.dylib (found version "1.2.8")
-- checking for module 'sdl2'
--   found sdl2, version 2.0.3
-- Found SDL2: /usr/local/lib/libSDL2.dylib;-framework Cocoa (found version "2.0.3")
-- checking for module 'SDL2_image'
--   found SDL2_image, version 2.0.0
-- Found SDL2_image: /usr/local/lib/libSDL2_image.dylib (found version "2.0.0")
-- checking for module 'SDL2_mixer'
--   found SDL2_mixer, version 2.0.0
-- Found SDL2_mixer: /usr/local/lib/libSDL2_mixer.dylib
-- checking for module 'SDL2_ttf'
--   found SDL2_ttf, version 2.0.12
-- Found SDL2_ttf: /usr/local/lib/libSDL2_ttf.dylib (found version "2.0.12")
-- cotire 1.6.6 loaded.
-- CXX target vcmi cotired without unity build.
-- C CXX target vcmiclient cotired without unity build and precompiled header. Exclusion of source files not supported for generator Xcode.
-- CXX target vcmiserver cotired without unity build.
-- CXX target BattleAI cotired without unity build.
-- CXX target StupidAI cotired without unity build.
-- CXX target VCAI cotired without unity build.
-- Configuring done
CMake Warning (dev) at client/CMakeLists.txt:79 (add_dependencies):
  Policy CMP0046 is not set: Error on non-existent dependency in
  add_dependencies.  Run "cmake --help-policy CMP0046" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  The dependency target "minizip" of target "vcmiclient" does not exist.
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev):
  Policy CMP0042 is not set: MACOSX_RPATH is enabled by default.  Run "cmake
  --help-policy CMP0042" for policy details.  Use the cmake_policy command to
  set the policy and suppress this warning.

  MACOSX_RPATH is not specified for the following targets:

   BattleAI
   EmptyAI
   StupidAI
   VCAI
   vcmi

This warning is for project developers.  Use -Wno-dev to suppress it.

-- Generating done
-- Build files have been written to: /Volumes/kuglee/vcmi/vcmi/build

error:

Undefined symbols for architecture x86_64:
  "_SDL_CreateYUVOverlay", referenced from:
      CVideoPlayer::open(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, bool, bool) in CVideoHandler.o
  "_SDL_DisplayYUVOverlay", referenced from:
      CVideoPlayer::playVideo(int, int, SDL_Surface*, bool) in CVideoHandler.o
  "_SDL_EnableKeyRepeat", referenced from:
      setScreenRes(int, int, int, bool, bool) in CMT.o
  "_SDL_EnableUNICODE", referenced from:
      setScreenRes(int, int, int, bool, bool) in CMT.o
  "_SDL_FreeYUVOverlay", referenced from:
      CVideoPlayer::close() in CVideoHandler.o
  "_SDL_GetKeyState", referenced from:
      isShiftKeyDown() in CPlayerInterface.o
      isAltKeyDown() in CPlayerInterface.o
      isCtrlKeyDown() in CPlayerInterface.o
      isCtrlKeyDown() in CAdvmapInterface.o
  "_SDL_LockYUVOverlay", referenced from:
      CVideoPlayer::nextFrame() in CVideoHandler.o
  "_SDL_SetAlpha", referenced from:
      CPicture::setAlpha(int) in Images.o
  "_SDL_SetColors", referenced from:
      Graphics::blueToPlayersAdv(SDL_Surface*, PlayerColor) in Graphics.o
      SDLImageLoader::init(Point, Point, Point, SDL_Color*) in CAnimation.o
      CSDL_Ext::setPlayerColor(SDL_Surface*, PlayerColor) in SDL_Extensions.o
      shiftColors(SDL_Surface*, int, int) in mapHandler.o
      CBuildingRect::show(SDL_Surface*) in CCastleInterface.o
  "_SDL_SetVideoMode", referenced from:
      setScreenRes(int, int, int, bool, bool) in CMT.o
      fullScreenChanged() in CMT.o
  "_SDL_UnlockYUVOverlay", referenced from:
      CVideoPlayer::nextFrame() in CVideoHandler.o
  "_SDL_UpdateRect", referenced from:
      CVideoPlayer::show(int, int, SDL_Surface*, bool) in CVideoHandler.o
      CSDL_Ext::update(SDL_Surface*) in SDL_Extensions.o
  "_SDL_VideoModeOK", referenced from:
      setScreenRes(int, int, int, bool, bool) in CMT.o
      fullScreenChanged() in CMT.o
  "_SDL_WM_SetCaption", referenced from:
      setScreenRes(int, int, int, bool, bool) in CMT.o
  "_SDL_WarpMouse", referenced from:
      CCursorHandler::centerCursor() in CCursorHandler.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I’ve figured it out, sdl1 was provided in the xcode-pack. I’ve replaced the frameworks with sdl2. It builds now. (I had to copy libminizip.dylib to the bin directory and the WoG files from 0.95 OS X build because xcode-pack doesn’t have them.)
The game loads, everything is fine until I start a game, when vcmi crashes.

VCMI_Server_log.txt
server_log.txt
VCMI_Client_log.txt

I have same problem with Kuglee, every thing goes well until I clicked the Begin to start a new game. server log is attached below.

16:09:09.109644 DEBUG global [0x7fff70fb4300] - 	Fog of war
16:09:09.111351 DEBUG global [0x7fff70fb4300] - 	Checking objectives
16:09:09.111411 INFO global [0x7fff70fb4300] - Seed after init is 1120231476 (before was 1414224548)
16:09:09.111538 INFO global [0x7fff70fb4300] - Gamestate initialized!
16:09:09.114354 TRACE global [0x7fff70fb4300] - Entering void CGameHandler::run(bool): resume=0.
16:09:09.223966 INFO global [0x7fff70fb4300] - Connection 1 will handle 5 player: 0 1 5 6 255 
16:09:09.224721 TRACE global [0x7fff70fb4300] - Turn 1
16:09:09.226067 TRACE global [0x7fff70fb4300] - Sending to all clients a package of type 11318SetAvailableHeroes
16:09:09.226167 ERROR network [0x7fff70fb4300] - CPack serialized... this should not happen!
16:09:09.226581 ERROR global [0x7fff70fb4300] - Error: signal 11:
16:09:09.238271 ERROR global [0x7fff70fb4300] - 0   vcmiserver                          0x0000000100235be6 _Z17handleLinuxSignali + 38
16:09:09.238545 ERROR global [0x7fff70fb4300] - 1   libsystem_platform.dylib            0x00007fff811b4f1a _sigtramp + 26
16:09:09.238687 ERROR global [0x7fff70fb4300] - 2   ???                                 0x00007fff5fbfb7a8 0x0 + 140734799787944
16:09:09.238863 ERROR global [0x7fff70fb4300] - 3   vcmiserver                          0x0000000100033848 _ZN12CGameHandler12sendAndApplyEP14CPackForClient + 72
16:09:09.239058 ERROR global [0x7fff70fb4300] - 4   vcmiserver                          0x0000000100019b0f _ZN12CGameHandler7newTurnEv + 7583
16:09:09.239260 ERROR global [0x7fff70fb4300] - 5   vcmiserver                          0x00000001000227d3 _ZN12CGameHandler3runEb + 10947
16:09:09.239428 ERROR global [0x7fff70fb4300] - 6   vcmiserver                          0x0000000100233f8a _ZN11CVCMIServer7newGameEv + 170
16:09:09.239623 ERROR global [0x7fff70fb4300] - 7   vcmiserver                          0x00000001002350a5 _ZN11CVCMIServer5startEv + 2965
16:09:09.239814 ERROR global [0x7fff70fb4300] - 8   vcmiserver                          0x0000000100236130 main + 816
16:09:09.240000 ERROR global [0x7fff70fb4300] - 9   libdyld.dylib                       0x00007fff905b85c9 start + 1
16:09:09.240154 ERROR global [0x7fff70fb4300] - 10  ???                                 0x0000000000000002 0x0 + 2

This is related to 2306. As soon as we sort out what’s going on, vcmi will become playable on MacOSX.

I’ve created the gist with instructions how to build VCMI on latest MaxOSX.

Here is a prebuilt package from ff3896b6fe080aabeca59551434e9bc52289579c:

mega.nz/#!0ABEjToZ!_yJTdNo7hb2e … m6svnCn-W0

I followed instructions and It’s work well, but is there a way to use launcher ?

Where all prebuilt stable releases are? Couldn’t find one for version 0.99, so I created it by myself. This package maybe useful for people with «App Transport Security» error.

0.99 dmg for OS X (no launcher, compiled on El Capitan 10.11.6): dl.dropbox.com/s/tzb91n8nuvhsle5/vcmi-0.99.dmg?dl=1

But before you open app, you must install dependencies in Terminal:

brew install smpeg2 innoextract libpng freetype 
brew install sdl sdl2 sdl2_ttf sdl2_image boost
brew install sdl2_mixer --with-smpeg2

After the VCMI installation is complete, perhaps you’d like to change screen resolution. It’s hard without a launcher, but possible to do in a number of ways:
enable «Extra resolutions» mod in launcher on Windows and then copy configuration files from Windows to Mac;
or just download and unzip my packed config: dl.dropbox.com/s/ictmw380ubifkf4/MacOsX_Resolutions.zip?dl=1
Then open VCMI home dir using Terminal:

cd "$HOME/Library/Application Support/vcmi"
open .

and overwrite «config», «downloads», «Mods» folders with unzipped ones.

Thank-you so much! Just one thing. Do you think you could use a tool like dylibbundler (I’m pretty sure there is a brew install for this) to bundle in all required dylibs into your app bundle? (bearing in mind keywords such as @executable_path to link the libraries to the executable) I’ve used it many times and I find the process is quite simple after building. I could do it, but you probably still have the setup.

Thing is not all of us mac users have homebrew installed, and it makes it difficult to use your app in any meaningful way. I myself strongly prefer macports as I feel it is generally a bad idea to mix GNU tools with Apple ones, and have been burned by homebrew in the past. But that’s me.

Thank you, this tool is very helpful. You can download release with included dependencies using this old link:
dl.dropbox.com/s/tzb91n8nuvhsle5/vcmi-0.99.dmg?dl=1

Awesome, seems to work great! Thanks again!