diff --git a/CMakeLists.txt b/CMakeLists.txt index f03acd0..847eef5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,27 +49,50 @@ find_package(Irrlicht) # if(WIN32) - set(DATADIR "data") + set(SHAREDIR "data") set(BINDIR "bin") set(DOCDIR "doc") set(EXAMPLE_CONF_DIR ".") elseif(APPLE) # random placeholders - set(DATADIR "share/${PROJECT_NAME}") + set(SHAREDIR "share/${PROJECT_NAME}") set(BINDIR "bin") set(DOCDIR "share/doc/${PROJECT_NAME}") - set(EXAMPLE_CONF_DIR ".") + set(EXAMPLE_CONF_DIR ${DOCDIR}) elseif(UNIX) # Linux, BSD etc - set(DATADIR "share/${PROJECT_NAME}") - set(BINDIR "bin") - set(DOCDIR "share/doc/${PROJECT_NAME}") - set(EXAMPLE_CONF_DIR "share/doc/${PROJECT_NAME}") + if(RUN_IN_PLACE) + set(SHAREDIR "share/${PROJECT_NAME}") + set(BINDIR "bin") + set(DOCDIR "share/doc/${PROJECT_NAME}") + set(MANDIR "share/man") + set(EXAMPLE_CONF_DIR ${DOCDIR}) + set(XDG_APPS_DIR "share/applications") + set(ICONDIR "share/icons") + set(LOCALEDIR "share/${PROJECT_NAME}/locale") + else() + set(SHAREDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}") + set(BINDIR "${CMAKE_INSTALL_PREFIX}/bin") + set(DOCDIR "${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}") + set(MANDIR "${CMAKE_INSTALL_PREFIX}/share/man") + set(EXAMPLE_CONF_DIR ${DOCDIR}) + set(XDG_APPS_DIR "${CMAKE_INSTALL_PREFIX}/share/applications") + set(ICONDIR "${CMAKE_INSTALL_PREFIX}/share/icons") + set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/locale") + endif() endif() install(FILES "README.txt" DESTINATION "${DOCDIR}") install(FILES "doc/changelog.txt" DESTINATION "${DOCDIR}") install(FILES "voxelands.conf.example" DESTINATION "${DOCDIR}") - +if (APPLE) + install(DIRECTORY "libs/" DESTINATION "libs") +endif() +if (UNIX AND NOT APPLE) + install(FILES "doc/voxelands.6" "doc/voxelands-server.6" DESTINATION "${MANDIR}/man6") + install(FILES "voxelands.desktop" DESTINATION "${XDG_APPS_DIR}") + install(FILES "voxelands.svg" DESTINATION "${ICONDIR}/hicolor/scalable/apps") + install(FILES "voxelands-24x24.png" DESTINATION "${ICONDIR}/hicolor/24x24/apps") +endif() # # Subdirectories # Be sure to add all relevant definitions above this diff --git a/README.txt b/README.txt index 54f9391..fc56062 100644 --- a/README.txt +++ b/README.txt @@ -91,17 +91,29 @@ $ ./voxelands Compiling on Mac OS X --------------------- - You need: - * XCode 5 - https://developer.apple.com/xcode/downloads/ - * XCode commandline tools - https://developer.apple.com/downloads/ + * XCode - https://developer.apple.com/xcode/downloads/ + * XCode commandline tools - https://developer.apple.com/downloads/index.action * homebrew - http://brew.sh/ + * XQuartz - http://xquartz.macosforge.org/landing/ - Steps: * Install dependencies - - brew install jpeg-turbo irrlicht - * make XCode project for client only - - cmake -DJPEG_INCLUDE_LIBRARY=/usr/local/Cellar/jpeg-turbo//include -DJPEG_LIBRARY=/usr/local/Cellar/jpeg-turbo/lib/libturbojpeg.a -DBUILD_SERVER=0 -DRUN_IN_PLACE=0 -G Xcode . - * build XCode project from commandline (If you're using the GUI, make sure to select "package" as build target) + - brew install libpng libvorbis libogg jpeg-turbo gettext irrlicht cmake + * make XCode project for client only (NOTE: make sure the linked libraries below have the correct versions) + - cmake -DIRRLICHT_INCLUDE_DIR=/usr/local/Cellar/irrlicht/1.8.1/include/irrlicht/ \ + -DIRRLICHT_LIBRARY=/usr/local/Cellar/irrlicht/1.8.1/lib/libIrrlicht.a \ + -DJPEG_INCLUDE_DIR=/usr/local/Cellar/jpeg-turbo/1.3.1/include \ + -DJPEG_LIBRARY=/usr/local/Cellar/jpeg-turbo/1.3.1/lib/libturbojpeg.a \ + -DBUILD_SERVER=0 -DRUN_IN_PLACE=0 \ + -DCUSTOM_GETTEXT_PATH=/usr/local/Cellar/gettext/0.19.2/ \ + -DCMAKE_OSX_ARCHITECTURES=x86_64 \ + -G Xcode . + * build XCode project from commandline (NOTE: if you're using the GUI, make sure to select "package" as build target) - xcodebuild -project voxelands.xcodeproj -target package + * open the .dmg app to install voxelands (NOTE: after installing it will show up in the dashboard) + +- NOTE: + * Currently misc/mac/makelibbundle.sh only bundles .dylibs that are linked from /usr/local Compiling on Windows: --------------------- diff --git a/cmake/Modules/FindGettextLib.cmake b/cmake/Modules/FindGettextLib.cmake index 6df66f2..84d4af8 100644 --- a/cmake/Modules/FindGettextLib.cmake +++ b/cmake/Modules/FindGettextLib.cmake @@ -62,7 +62,7 @@ ENDIF() IF(GETTEXT_FOUND) SET(GETTEXT_PO_PATH ${CMAKE_SOURCE_DIR}/po) SET(GETTEXT_MO_BUILD_PATH ${CMAKE_BINARY_DIR}/locale//LC_MESSAGES) - SET(GETTEXT_MO_DEST_PATH ${DATADIR}/../locale//LC_MESSAGES) + SET(GETTEXT_MO_DEST_PATH ${SHAREDIR}/../locale//LC_MESSAGES) FILE(GLOB GETTEXT_AVAILABLE_LOCALES RELATIVE ${GETTEXT_PO_PATH} "${GETTEXT_PO_PATH}/*") LIST(REMOVE_ITEM GETTEXT_AVAILABLE_LOCALES voxelands.pot) MACRO(SET_MO_PATHS _buildvar _destvar _locale) diff --git a/misc/mac/makelibbundle.sh b/misc/mac/makelibbundle.sh new file mode 100755 index 0000000..3620465 --- /dev/null +++ b/misc/mac/makelibbundle.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env sh + +tmp=`pwd` +proj_dir=`dirname "$tmp"` +applibs_dir="$proj_dir/libs/" +bin="$1/voxelands" +dylibs=($(otool -L "$bin" | grep '/usr/local' | awk -F" " '{print $1}')) +mkdir "$applibs_dir" +for lib in "${dylibs[@]}" +do + cp "$lib" "$applibs_dir" + echo "############################################################################################" + echo "##### Bundling Libs #####" + echo "############################################################################################" + echo "#### install_name_tool -change "$lib" @executable_path/../Resources/libs/$(basename $lib) "$bin" #####" + echo "############################################################################################" + install_name_tool -change "$lib" @executable_path/../Resources/libs/$(basename $lib) "$bin" +done diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 97e02be..11acefa 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -352,17 +352,17 @@ if(BUILD_CLIENT) install(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR}) file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/textures/*.png") - install(FILES ${images} DESTINATION ${DATADIR}/textures) + install(FILES ${images} DESTINATION ${SHAREDIR}/textures) file(GLOB models "${CMAKE_CURRENT_SOURCE_DIR}/../data/models/*.b3d") - install(FILES ${models} DESTINATION ${DATADIR}/models) + install(FILES ${models} DESTINATION ${SHAREDIR}/models) file(GLOB modelsx "${CMAKE_CURRENT_SOURCE_DIR}/../data/models/*.x") - install(FILES ${modelsx} DESTINATION ${DATADIR}/models) + install(FILES ${modelsx} DESTINATION ${SHAREDIR}/models) file(GLOB html "${CMAKE_CURRENT_SOURCE_DIR}/../data/html/*.html") - install(FILES ${html} DESTINATION ${DATADIR}/html) + install(FILES ${html} DESTINATION ${SHAREDIR}/html) file(GLOB sounds "${CMAKE_CURRENT_SOURCE_DIR}/../data/sounds/*.ogg") - install(FILES ${sounds} DESTINATION ${DATADIR}/sounds) + install(FILES ${sounds} DESTINATION ${SHAREDIR}/sounds) if(USE_GETTEXT) foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES}) @@ -415,6 +415,9 @@ if(BUILD_CLIENT) add_custom_command (TARGET ${PROJECT_NAME} PRE_BUILD COMMAND mkdir -p ${EXECUTABLE_OUTPUT_PATH}/\${CONFIGURATION}/Contents/Resources) find_program(IBTOOL ibtool HINTS "/usr/bin" "${OSX_DEVELOPER_ROOT}/usr/bin") + # Make sure the 'Libs' Directory is correctly created before we build + add_custom_command (TARGET ${PROJECT_NAME} PRE_BUILD + COMMAND mkdir -p ${EXECUTABLE_OUTPUT_PATH}/\${CONFIGURATION}/Contents/Resources/libs) if (${IBTOOL} STREQUAL "IBTOOL-NOTFOUND") message(SEND_ERROR "ibtool can not be found and is needed to compile the .xib files. It should have been installed with the Apple developer tools. The default system paths were searched in addition to ${OSX_DEVELOPER_ROOT}/usr/bin") endif() @@ -427,13 +430,17 @@ if(BUILD_CLIENT) COMMENT "Compiling ${CMAKE_SOURCE_DIR}/${xib}.xib") endforeach() # Make icns from svg, just in case it was updated - add_custom_command (TARGET ${PROJECT_NAME} PRE_BUILD + add_custom_command (TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/misc/mac/makeicns.sh COMMENT "making ${PROJECT_NAME}.icns file from ${PROJECT_NAME}.svg") # Change to proper version and mac osx deployment version - add_custom_command (TARGET ${PROJECT_NAME} PRE_BUILD + add_custom_command (TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/misc/mac/makeplist.sh ${VERSION_STRING} COMMENT "Change Info.plist according to provided CMAKE variables") + # Include the linked '.dylib' to bundle inside the app + add_custom_command (TARGET ${PROJECT_NAME} POST_BUILD + COMMAND ${CMAKE_SOURCE_DIR}/misc/mac/makelibbundle.sh ${EXECUTABLE_OUTPUT_PATH}/\${CONFIGURATION} + COMMENT "Bundling dylibs with the app bundle") endif(APPLE) endif(BUILD_CLIENT)