project(voxelands)
cmake_minimum_required( VERSION 2.6 )

if(RUN_IN_PLACE)
	add_definitions ( -DRUN_IN_PLACE )
endif(RUN_IN_PLACE)

set(USE_GETTEXT 1)

find_package(GettextLib)

if(GETTEXT_FOUND)
	message(STATUS "gettext msgfmt path: ${GETTEXT_MSGFMT}")
	message(STATUS "GetText enabled; locales found: ${GETTEXT_AVAILABLE_LOCALES}")
endif(GETTEXT_FOUND)

# user visible option to enable/disable audio
OPTION(ENABLE_AUDIO "Enable audio" ON)
OPTION(ENABLE_MUMBLE "Enable Mumble Positional Audio" ON)

## this is only set to 1 if audio is enabled _and_ available
set(USE_AUDIO 0)
set(USE_MUMBLE 0)
set(SOUND_PROBLEM 0)

if(ENABLE_AUDIO AND BUILD_CLIENT)
	# Sound libraries
	find_package(OpenAL)
	find_package(Vorbis)
	if(NOT OPENAL_FOUND)
		message(STATUS "Sound enabled, but OpenAL not found!")
		set(SOUND_PROBLEM 1)
		MARK_AS_ADVANCED(CLEAR OPENAL_LIBRARY OPENAL_INCLUDE_DIR)
	endif()
	if(NOT VORBIS_FOUND)
		message(STATUS "Sound enabled, but Vorbis libraries not found!")
		set(SOUND_PROBLEM 1)
		MARK_AS_ADVANCED(CLEAR OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY)
	endif()
	if(OPENAL_FOUND AND VORBIS_FOUND)
		set(USE_AUDIO 1)
		message(STATUS "Sound enabled")
	endif()
	if(ENABLE_MUMBLE AND USE_AUDIO)
		if(WIN32)
			set(USE_MUMBLE 1)
		else()
			find_library(MUMBLE_LIBS rt)
			set(USE_MUMBLE 1)
		endif()
	endif()
endif(ENABLE_AUDIO AND BUILD_CLIENT)

if(SOUND_PROBLEM)
	message(FATAL_ERROR "Sound enabled, but cannot be used.\n"
		"To continue, either fill in the required paths or disable sound. (-DENABLE_AUDIO=0)")
endif()
if(USE_AUDIO)
	if(USE_MUMBLE)
		set(audio_SRCS sound.c sound_ogg.c sound_wav.c sound_util.cpp sound_mumble.c)
	else()
		set(audio_SRCS sound.c sound_ogg.c sound_wav.c sound_util.cpp)
	endif()
	set(AUDIO_INCLUDE_DIRS
		${OPENAL_INCLUDE_DIR}
		${VORBIS_INCLUDE_DIR}
		${OGG_INCLUDE_DIR}
		)
	set(AUDIO_LIBRARIES
		${OPENAL_LIBRARY}
		${VORBIS_LIBRARIES}
		)
endif()

option(ENABLE_FREETYPE "Enable freetype2 (truetype fonts and basic unicode support)" ON)
set(USE_FREETYPE 0)

if(ENABLE_FREETYPE)
	find_package(Freetype REQUIRED)
	if (NOT FREETYPE_FOUND)
		MARK_AS_ADVANCED(CLEAR FREETYPE_INCLUDE_DIR_ft2build FREETYPE_INCLUDE_DIR_freetype2 FREETYPE_LIBRARY)
	endif()
	set(USE_FREETYPE 1)
endif(ENABLE_FREETYPE)

if(NOT MSVC)
	set(USE_GPROF 0 CACHE BOOL "Use -pg flag for g++")
endif()

# Use cmake_config.h
add_definitions ( -DUSE_CMAKE_CONFIG_H )

if(WIN32)
	# Windows
	if(MSVC) # MSVC Specifics
		# Surpress some useless warnings
		add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
	else() # Probably MinGW = GCC
		set(PLATFORM_LIBS ws2_32.lib)
	endif()
	# Zlib stuff
	set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5"
			CACHE PATH "Zlib include directory")
	set(ZLIB_LIBRARIES "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.lib"
			CACHE FILEPATH "Path to zlibwapi.lib")
	set(ZLIB_DLL "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.dll"
			CACHE FILEPATH "Path to zlibwapi.dll (for installation)")
	set(IRRLICHT_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../../irrlicht-1.7.2"
			CACHE PATH "irrlicht dir")
	if(USE_FREETYPE)
		set(FREETYPE_INCLUDE_DIR_ft2build "${PROJECT_SOURCE_DIR}/../../freetype2/include/"
				CACHE PATH "freetype include dir")
		set(FREETYPE_INCLUDE_DIR_freetype2 "${PROJECT_SOURCE_DIR}/../../freetype2/include/freetype"
				CACHE PATH "freetype include dir")
		set(FREETYPE_LIBRARY "${PROJECT_SOURCE_DIR}/../../freetype2/objs/win32/vc2005/freetype247.lib"
				CACHE FILEPATH "Path to freetype247.lib")
	endif(USE_FREETYPE)
else()
	# Unix probably
	if(BUILD_CLIENT)
		find_package(X11 REQUIRED)
		find_package(OpenGL REQUIRED)
		find_package(JPEG REQUIRED)
		find_package(BZip2 REQUIRED)
		find_package(PNG REQUIRED)
		if(APPLE)
			FIND_LIBRARY(CARBON_LIB Carbon)
			FIND_LIBRARY(COCOA_LIB Cocoa)
			FIND_LIBRARY(IOKIT_LIB IOKit)
			FIND_LIBRARY(COREFOUNDATION_LIB CoreFoundation)
			mark_as_advanced(
				CARBON_LIB
				COCOA_LIB
				IOKIT_LIB
				COREFOUNDATION_LIB
			)
			SET(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${CARBON_LIB} ${COCOA_LIB} ${IOKIT_LIB} ${COREFOUNDATION_LIB})
			SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Cocoa")
		endif(APPLE)
	endif(BUILD_CLIENT)
	find_package(ZLIB REQUIRED)
	set(PLATFORM_LIBS -lpthread ${CMAKE_DL_LIBS})
	#set(CLIENT_PLATFORM_LIBS -lXxf86vm)
	# This way Xxf86vm is found on OpenBSD too
	find_library(XXF86VM_LIBRARY Xxf86vm)
	set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY})
endif()

find_package(Jthread REQUIRED)
find_package(Sqlite3 REQUIRED)

if(USE_FREETYPE)
	if(UNIX)
		include(FindPkgConfig)
		if(PKG_CONFIG_FOUND)
			pkg_check_modules(FREETYPE QUIET freetype2)
			if(FREETYPE_FOUND)
				SET(FREETYPE_PKGCONFIG_FOUND TRUE)
				SET(FREETYPE_LIBRARY ${FREETYPE_LIBRARIES})
				# because cmake is idiotic
				string(REPLACE ";" " " FREETYPE_CFLAGS_STR ${FREETYPE_CFLAGS})
				string(REPLACE ";" " " FREETYPE_LDFLAGS_STR ${FREETYPE_LDFLAGS})
			endif(FREETYPE_FOUND)
		endif(PKG_CONFIG_FOUND)
	endif(UNIX)
	if(NOT FREETYPE_FOUND)
		find_package(Freetype REQUIRED)
	endif(NOT FREETYPE_FOUND)
	set(CGUITTFONT_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cguittfont")
	set(CGUITTFONT_LIBRARY cguittfont)
endif(USE_FREETYPE)

configure_file(
	"${PROJECT_SOURCE_DIR}/cmake_config.h.in"
	"${PROJECT_BINARY_DIR}/cmake_config.h"
)

set(common_SRCS
	auth.c
	array.c
	ban.c
	command.c
	intl.c
	list.c
	log.c
	nvp.c
	config.c
	config_default.c
	crypto.c
	crypto_base64.c
	file.c
	thread.c
	path.c
	string.c
	bridge_temp.cpp
	servercommand.c
	world.c
	log.cpp
	content_sao.cpp
	mapgen/mapgen.cpp
	mapgen/mapgen_trees.cpp
	mapgen/mapgen_rocks.cpp
	mapgen/mapgen_plants.cpp
	mapgen/mapgen_dungeon.cpp
	mapgen/mapgen_util.cpp
	mapgen/mapgen_space.cpp
	mapgen/mapgen_sky.cpp
	mapgen/mapgen_thedeep.cpp
	mapgen/mapgen_flat.cpp
	nodemeta/content_nodemeta_circuits.cpp
	nodemeta/content_nodemeta_sign.cpp
	nodemeta/content_nodemeta_flag.cpp
	nodemeta/content_nodemeta_bed.cpp
	nodemeta/content_nodemeta_storage_old.cpp
	nodemeta/content_nodemeta_storage.cpp
	nodemeta/content_nodemeta_storage_prefill.cpp
	nodemeta/content_nodemeta_borderstone.cpp
	nodemeta/content_nodemeta_cooking.cpp
	nodemeta/content_nodemeta_tnt.cpp
	nodemeta/content_nodemeta_incinerator.cpp
	nodemeta/content_nodemeta_blocks.cpp
	nodemeta/content_nodemeta_forge.cpp
	nodemeta/content_nodemeta_book.cpp
	nodemeta/content_nodemeta_book_guide.cpp
	content_craft.cpp
	content_craftitem.cpp
	content_clothesitem.cpp
	content_toolitem.cpp
	content_mob.cpp
	content_mapnode.cpp
	content_mapnode_door.cpp
	content_mapnode_farm.cpp
	content_mapnode_circuit.cpp
	content_mapnode_furniture.cpp
	content_mapnode_stair.cpp
	content_mapnode_slab.cpp
	content_mapnode_special.cpp
	content_mapnode_sign.cpp
	content_mapnode_plants.cpp
	content_mapnode_util.cpp
	content_list.c
	content_nodebox.cpp
	collision.cpp
	nodemetadata.cpp
	serverobject.cpp
	noise.cpp
	mineral.cpp
	enchantment.cpp
	porting.cpp
	mapnode.cpp
	voxel.cpp
	inventory.cpp
	debug.cpp
	serialization.cpp
	light.cpp
	connection.cpp
	environment.cpp
	plantgrowth.cpp
	server.cpp
	socket.cpp
	mapblock.cpp
	mapsector.cpp
	map.cpp
	player.cpp
	utility.cpp
	test.cpp
	sha1.cpp
	base64.cpp
	http.cpp
)

# This gives us the icon
if(WIN32)
	if(MINGW)
		ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
			COMMAND windres.exe -I${CMAKE_CURRENT_SOURCE_DIR}
			-i${CMAKE_CURRENT_SOURCE_DIR}/winresource.rc
			-o ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o)
		SET(common_SRCS ${common_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o)
	else(MINGW) # Probably MSVC
		set(common_SRCS ${common_SRCS} winresource.rc)
	endif(MINGW)
endif()

set(voxelands_SRCS
	${common_SRCS}
	${audio_SRCS}
	sky.cpp
	hud.cpp
	content_mapblock.cpp
	content_cao.cpp
	mapblock_mesh.cpp
	selection_mesh.cpp
	keycode.cpp
	camera.cpp
	clouds.cpp
	particles.cpp
	clientobject.cpp
	guiMainMenu.cpp
	guiSettingsMenu.cpp
	guiSingleplayerMenu.cpp
	guiMultiplayerMenu.cpp
	guiMessageMenu.cpp
	guiTextInputMenu.cpp
	guiFormSpecMenu.cpp
	guiPauseMenu.cpp
	guiPasswordChange.cpp
	guiDeathScreen.cpp
	character_creator.cpp
	mesh.cpp
	client.cpp
	tile.cpp
	game.cpp
	main.cpp
)

# Server sources
set(voxelandsserver_SRCS
	${common_SRCS}
	servermain.cpp
)

include_directories(
	${CMAKE_BINARY_DIR}/src/jthread
	${PROJECT_BINARY_DIR}
	${IRRLICHT_INCLUDE_DIR}
	${ZLIB_INCLUDE_DIR}
	${CMAKE_BUILD_TYPE}
	${PNG_INCLUDE_DIR}
	${AUDIO_INCLUDE_DIRS}
	${JTHREAD_INCLUDE_DIR}
	${SQLITE3_INCLUDE_DIR}
)

if(USE_FREETYPE)
	set(voxelands_SRCS
		${voxelands_SRCS}
		intlGUIEditBox.cpp
	)
	include_directories(
		${FREETYPE_INCLUDE_DIRS}
		${CGUITTFONT_INCLUDE_DIR}
	)
endif(USE_FREETYPE)

set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")

if(BUILD_CLIENT)
	add_executable(${PROJECT_NAME} ${voxelands_SRCS})
	target_link_libraries(
		${PROJECT_NAME}
		${ZLIB_LIBRARIES}
		${IRRLICHT_LIBRARY}
		${OPENGL_LIBRARIES}
		${JPEG_LIBRARIES}
		${BZIP2_LIBRARIES}
		${PNG_LIBRARIES}
		${X11_LIBRARIES}
		${AUDIO_LIBRARIES}
		${JTHREAD_LIBRARY}
		${SQLITE3_LIBRARY}
		${PLATFORM_LIBS}
		${CLIENT_PLATFORM_LIBS}
		${MUMBLE_LIBS}
	)
	if(USE_FREETYPE)
		if(FREETYPE_PKGCONFIG_FOUND)
			set_target_properties(${PROJECT_NAME}
				PROPERTIES
				COMPILE_FLAGS "${FREETYPE_CFLAGS_STR}"
			)
		endif(FREETYPE_PKGCONFIG_FOUND)
		target_link_libraries(
			${PROJECT_NAME}
			${FREETYPE_LIBRARY}
			${CGUITTFONT_LIBRARY}
		)
	endif(USE_FREETYPE)
endif(BUILD_CLIENT)

if(BUILD_SERVER)
	add_executable(${PROJECT_NAME}-server ${voxelandsserver_SRCS})
	target_link_libraries(
		${PROJECT_NAME}-server
		${ZLIB_LIBRARIES}
		${JTHREAD_LIBRARY}
		${SQLITE3_LIBRARY}
		${PLATFORM_LIBS}
	)
endif(BUILD_SERVER)

#
# Set some optimizations and tweaks
#

include(CheckCXXCompilerFlag)

if(MSVC)
	# Visual Studio

	# EHa enables SEH exceptions (used for catching segfaults)
	set(CMAKE_CXX_FLAGS_RELEASE "/EHa /O2 /Ob2 /Oi /Ot /Oy /GL /FD /MT /GS- /arch:SSE /fp:fast /D NDEBUG /D _HAS_ITERATOR_DEBUGGING=0 /TP")
	#set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
	set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /SAFESEH:NO")

	# Debug build doesn't catch exceptions by itself
	# Add some optimizations because otherwise it's VERY slow
	set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")

	# Flags for C files (sqlite)
	# /MT = Link statically with standard library stuff
	set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT")

	if(BUILD_SERVER)
		set_target_properties(${PROJECT_NAME}-server PROPERTIES
				COMPILE_DEFINITIONS "SERVER")
	endif(BUILD_SERVER)

else()
	if(APPLE)
		set(CMAKE_OSX_ARCHITECTURES x86_64 FORCE)
		set(ARCH x86_64)
	endif()

	set(SAFETY_FLAGS "-fwrapv -fno-fast-math")
	if(MINGW)
		set(SAFETY_LDFLAGS "")
	else()
		set(SAFETY_LDFLAGS "-Wl,-z,relro,-z,now")
	endif()
	set(OPT_FLAGS "-O3 -fomit-frame-pointer")
	set(OPT_LDFLAGS "-Wl,-O1,--sort-common,-s")

	if(ENABLE_SSP)
		CHECK_CXX_COMPILER_FLAG("-fstack-protector-strong" HAS_FSTACK_STRONG)
		if(HAS_FSTACK_STRONG)
			set(SAFETY_FLAGS "${SAFETY_FLAGS} -fstack-protector-strong")
		else()
			set(SAFETY_FLAGS "${SAFETY_FLAGS} -fstack-protector")
		endif()
	endif()
	if(ENABLE_SAFESTACK)
		CHECK_CXX_COMPILER_FLAG("-fsanitize=safe-stack" HAS_SAFESTACK)
		if(HAS_SAFESTACK)
			set(SAFETY_FLAGS "${SAFETY_FLAGS} -fsanitize=safe-stack")
			set(SAFETY_LDFLAGS "${SAFETY_LDFLAGS} -fsanitize=safe-stack -lrt")
		endif()
	endif()
	if(ENABLE_PIE)
		set(SAFETY_FLAGS "${SAFETY_FLAGS} -fPIC -fPIE")
		set(SAFETY_LDFLAGS "${SAFETY_LDFLAGS} -Wl,-pie")
	endif()
	if(CPU_OPTS)
		set(OPT_FLAGS "${OPT_FLAGS} -march=${CPUTYPE}")
	endif()

	set(CMAKE_CXX_FLAGS_RELEASE "${OPT_FLAGS} ${SAFETY_FLAGS} -Wall -DNDEBUG -pipe -fpermissive -Wno-write-strings")
	set(CMAKE_C_FLAGS_RELEASE "${OPT_FLAGS} ${SAFETY_FLAGS} -Wall -DNDEBUG -pipe")
	set(CMAKE_CXX_FLAGS_DEBUG "${SAFETY_FLAGS} -Wall -O0 -g3 -ggdb -fpermissive -Wno-write-strings")
	set(CMAKE_C_FLAGS_DEBUG "${SAFETY_FLAGS} -Wall -O0 -g3 -ggdb")

	set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${OPT_LDFLAGS} ${SAFETY_LDFLAGS}")
	set(CMAKE_MODULE_LINKER_FLAGS_RELEASE ${CMAKE_EXE_LINKER_FLAGS_RELEASE})
	set(CMAKE_SHARED_LINKER_FLAGS_RELEASE ${CMAKE_EXE_LINKER_FLAGS_RELEASE})
	set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${SAFETY_LDFLAGS}")
	set(CMAKE_MODULE_LINKER_FLAGS_DEBUG ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
	set(CMAKE_SHARED_LINKER_FLAGS_DEBUG ${CMAKE_EXE_LINKER_FLAGS_DEBUG})

	if(USE_GPROF)
		set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
	endif()

	if(BUILD_SERVER)
		set_target_properties(${PROJECT_NAME}-server PROPERTIES
				COMPILE_DEFINITIONS "SERVER")
	endif(BUILD_SERVER)

	if(CMAKE_BUILD_TYPE STREQUAL Release)
		MESSAGE(STATUS "C/CXX Flags: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}")
		MESSAGE(STATUS "Linker Flags: ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
	endif()
   	if(CMAKE_BUILD_TYPE STREQUAL Debug)
		MESSAGE(STATUS "C/CXX Flags: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}")
		MESSAGE(STATUS "Linker Flags: ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
	endif()
endif()
#
# Installation
#

if(BUILD_CLIENT)
	install(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})

	file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/textures/*.png")
	install(FILES ${images} DESTINATION ${SHAREDIR}/textures)
	file(GLOB skins "${CMAKE_CURRENT_SOURCE_DIR}/../data/textures/skins/*.png")
	install(FILES ${skins} DESTINATION ${SHAREDIR}/textures/skins)
	file(GLOB models "${CMAKE_CURRENT_SOURCE_DIR}/../data/models/*.b3d")
	install(FILES ${models} DESTINATION ${SHAREDIR}/models)
	file(GLOB modelsx "${CMAKE_CURRENT_SOURCE_DIR}/../data/models/*.x")
	install(FILES ${modelsx} DESTINATION ${SHAREDIR}/models)
	file(GLOB sounds "${CMAKE_CURRENT_SOURCE_DIR}/../data/sounds/*.ogg")
	install(FILES ${sounds} DESTINATION ${SHAREDIR}/sounds)
	file(GLOB fonts "${CMAKE_CURRENT_SOURCE_DIR}/../data/fonts/*.ttf")
	install(FILES ${fonts} DESTINATION ${SHAREDIR}/fonts)

	if(USE_GETTEXT)
		foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
			set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
			set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
			install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH})
		endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
	endif()

	if(WIN32)
		if(DEFINED IRRLICHT_DLL)
			install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
		endif()
		if(DEFINED ZLIB_DLL)
			install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
		endif()
		if(FREETYPE_DLL)
			install(FILES ${FREETYPE_DLL} DESTINATION ${BINDIR})
		endif()
		if(USE_AUDIO)
			if(DEFINED VORBIS_DLL)
				install(FILES ${VORBIS_DLL} DESTINATION ${BINDIR})
			endif()
			if(DEFINED VORBISFILE_DLL)
				install(FILES ${VORBISFILE_DLL} DESTINATION ${BINDIR})
			endif()
			if(DEFINED OGG_DLL)
				install(FILES ${OGG_DLL} DESTINATION ${BINDIR})
			endif()
			if(DEFINED OPENAL_DLL)
				install(FILES ${OPENAL_DLL} DESTINATION ${BINDIR})
			endif()
		endif(USE_AUDIO)
	endif()
	if(APPLE)
		# TODO: install Irrlicht.framework into app bundle!
		# it should be in Contents/Resources/Frameworks/Irrlicht.framework

		# Compile .xib files
		# should be in Contents/Resources/MainMenu.nib at the end
		set (VoxelandsMac_XIBS
			MainMenu
		)
		# Make sure the 'Resources' Directory is correctly created before we build
		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()
		# Compile the .xib files using the 'ibtool' program with the destination being the app package
		foreach(xib ${VoxelandsMac_XIBS})
			add_custom_command (TARGET ${PROJECT_NAME} POST_BUILD
				COMMAND ${IBTOOL} --errors --warnings --notices --output-format human-readable-text
				--compile ${EXECUTABLE_OUTPUT_PATH}/\${CONFIGURATION}/Contents/Resources/${xib}.nib
				${CMAKE_SOURCE_DIR}/misc/mac/${xib}.xib
				COMMENT "Compiling ${CMAKE_SOURCE_DIR}/${xib}.xib")
		endforeach()
        # Make icns from svg, just in case it was updated. Only rebuild from svg when asked.
        # Most times use voxelands.icns from binary blob instead.
        if(REBUILD_ICNS)
            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")
        endif()
        # Change to proper version and mac osx deployment version
        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)

if(BUILD_SERVER)
	install(TARGETS ${PROJECT_NAME}-server DESTINATION ${BINDIR})
	file(GLOB html "${CMAKE_CURRENT_SOURCE_DIR}/../data/html/*.html")
	install(FILES ${html} DESTINATION ${SHAREDIR}/html)
endif(BUILD_SERVER)

if (USE_GETTEXT)
	set(MO_FILES)

	foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
		set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/voxelands.po")
		set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
		set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")

		add_custom_command(OUTPUT ${MO_BUILD_PATH}
			COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH}
			COMMENT "mo-update [${LOCALE}]: Creating locale directory.")

		add_custom_command(
			OUTPUT ${MO_FILE_PATH}
			COMMAND ${GETTEXT_MSGFMT} -o ${MO_FILE_PATH} ${PO_FILE_PATH}
			DEPENDS ${MO_BUILD_PATH} ${PO_FILE_PATH}
			WORKING_DIRECTORY "${GETTEXT_PO_PATH}/${LOCALE}"
			COMMENT "mo-update [${LOCALE}]: Creating mo file."
			)

		set(MO_FILES ${MO_FILES} ${MO_FILE_PATH})
	endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})

	add_custom_target(translations ALL COMMENT "mo update" DEPENDS ${MO_FILES})
endif(USE_GETTEXT)

# Subdirectories

if (JTHREAD_FOUND)
else (JTHREAD_FOUND)
	add_subdirectory(jthread)
endif (JTHREAD_FOUND)

if (BUILD_CLIENT AND USE_FREETYPE)
	add_subdirectory(cguittfont)
endif (BUILD_CLIENT AND USE_FREETYPE)

if (SQLITE3_FOUND)
else (SQLITE3_FOUND)
add_subdirectory(sqlite)
endif (SQLITE3_FOUND)

#end
