more cmake tweaks for all platforms and various changes for mac build

- rename DATADIR to SHAREDIR, setup proper directories to install
miscellaneous files for the project

- create libs dir PRE_BUILD, run scripts POST_BUILD, bundle libs linked
from /usr/local, install the dylibs bundled

- makelibbundle.sh bundles dylibs linked from /usr/local

- just install one configuration file in .app

- updated README on compiling on Mac OSX
This commit is contained in:
Maverick JS 2014-09-26 20:50:18 +02:00 committed by darkrose
parent 8bb869958c
commit 668a031bd0
5 changed files with 82 additions and 22 deletions

View File

@ -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

View File

@ -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/<version>/include -DJPEG_LIBRARY=/usr/local/Cellar/jpeg-turbo/<version>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:
---------------------

View File

@ -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/<locale>/LC_MESSAGES)
SET(GETTEXT_MO_DEST_PATH ${DATADIR}/../locale/<locale>/LC_MESSAGES)
SET(GETTEXT_MO_DEST_PATH ${SHAREDIR}/../locale/<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)

18
misc/mac/makelibbundle.sh Executable file
View File

@ -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

View File

@ -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)