From 9fbb0889a7a73d3e879f76aa4c398dcb78c532ed Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sat, 8 Jan 2011 17:34:25 +0200 Subject: CMake stuff works now on linux and windows... and should be possible to make to work on OS X. --- src/CMakeLists.txt | 177 +++++++++++++++++++++++++++++++++++++++++++++-------- src/main.cpp | 20 +++--- src/porting.cpp | 17 +++-- src/servermain.cpp | 21 ++++--- 4 files changed, 191 insertions(+), 44 deletions(-) (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 72a159f16..083395271 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,19 +1,37 @@ project(minetest) cmake_minimum_required( VERSION 2.6 ) -set ( CMAKE_BUILD_TYPE Debug ) -add_definitions ( -Wall -DRUN_IN_PLACE -O2) -find_package(ZLIB REQUIRED) -find_package(X11 REQUIRED) -find_package(OpenGL REQUIRED) -find_package(JPEG REQUIRED) -find_package(BZip2 REQUIRED) -if( UNIX ) - #set( platform_SRCS some_necessary_linux_file.cpp ) -else( UNIX ) - #windows - #set( platform_SRCS dllmain.cpp stdafx.cpp ) -endif( UNIX ) +if(RUN_IN_PLACE) + add_definitions ( -DRUN_IN_PLACE ) +endif(RUN_IN_PLACE) + +if(UNIX) + # Unix + if(BUILD_CLIENT) + find_package(X11 REQUIRED) + find_package(OpenGL REQUIRED) + find_package(JPEG REQUIRED) + find_package(BZip2 REQUIRED) + endif(BUILD_CLIENT) + find_package(ZLIB REQUIRED) + set(SERVER_PLATFORM_LIBS -lpthread) +elseif(WIN32) + # Windows + # Surpress some warnings + add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 ) + # 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 PATH "Path to zlibwapi.lib") + set(ZLIB_DLL "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.dll" + CACHE PATH "Path to zlibwapi.dll (for installation)") +endif() + +configure_file( + "${PROJECT_SOURCE_DIR}/config.h.in" + "${PROJECT_BINARY_DIR}/config.h" +) set(minetest_SRCS porting.cpp @@ -48,26 +66,135 @@ set(minetest_SRCS test.cpp ) +set(minetestserver_SRCS + porting.cpp + materials.cpp + defaultsettings.cpp + mapnode.cpp + voxel.cpp + mapblockobject.cpp + inventory.cpp + debug.cpp + serialization.cpp + light.cpp + filesys.cpp + connection.cpp + environment.cpp + server.cpp + socket.cpp + mapblock.cpp + mapsector.cpp + heightmap.cpp + map.cpp + player.cpp + utility.cpp + servermain.cpp + test.cpp +) + include_directories( - ${ZLIB_INCLUDE_DIR} + ${PROJECT_BINARY_DIR} ${IRRLICHT_INCLUDE_DIR} + ${ZLIB_INCLUDE_DIR} + ${CMAKE_BUILD_TYPE} "${PROJECT_SOURCE_DIR}/jthread" ) set(EXECUTABLE_OUTPUT_PATH ../bin) -add_executable(minetest ${minetest_SRCS}) +if(BUILD_CLIENT) + add_executable(minetest ${minetest_SRCS}) + target_link_libraries( + minetest + ${ZLIB_LIBRARIES} + ${IRRLICHT_LIBRARY} + ${OPENGL_LIBRARIES} + ${JPEG_LIBRARIES} + ${BZIP2_LIBRARIES} + jthread + ) +endif(BUILD_CLIENT) +if(BUILD_SERVER) + add_executable(minetestserver ${minetestserver_SRCS}) + target_link_libraries( + minetestserver + ${ZLIB_LIBRARIES} + jthread + ${SERVER_PLATFORM_LIBS} + ) +endif(BUILD_SERVER) -target_link_libraries( - minetest - ${ZLIB_LIBRARIES} - ${IRRLICHT_LIBRARY} - ${OPENGL_LIBRARIES} - ${JPEG_LIBRARIES} - ${BZIP2_LIBRARIES} - jthread -) +# Set some optimizations and tweaks +if( UNIX ) + # Unix + + set(UNIX_FLAGS "-Wall") + + if(BUILD_CLIENT) + set_target_properties(minetest PROPERTIES COMPILE_FLAGS + "${UNIX_FLAGS}") + endif(BUILD_CLIENT) + + if(BUILD_SERVER) + set_target_properties(minetestserver PROPERTIES COMPILE_FLAGS + "${UNIX_FLAGS} -DSERVER") + endif(BUILD_SERVER) + +else( UNIX ) + # Windows + + if(BUILD_CLIENT) + # EHa enables SEH exceptions (used for catching segfaults) + set_target_properties(minetest PROPERTIES COMPILE_FLAGS + "/O2 /Ob2 /Oi /Ot /Oy /GL /EHa") + endif(BUILD_CLIENT) + + if(BUILD_SERVER) + # EHa enables SEH exceptions (used for catching segfaults) + set_target_properties(minetestserver PROPERTIES COMPILE_FLAGS + "/O2 /Ob2 /Oi /Ot /Oy /GL /EHa /D SERVER") + endif(BUILD_SERVER) + +endif( UNIX ) + +# +# Installation +# + +if(WIN32) + set(DATADIR "data") + set(BINDIR "bin") +elseif(APPLE) + set(DATADIR "share/minetest") + set(BINDIR "bin") +elseif(UNIX) + set(DATADIR "share/minetest") + set(BINDIR "bin") +endif() + +if(BUILD_CLIENT) + install(TARGETS minetest DESTINATION ${BINDIR}) + + file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.png") + + install(FILES ${images} DESTINATION ${DATADIR}) + + if(WIN32) + if(DEFINED IRRLICHT_DLL) + install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR}) + endif() + if(DEFINED ZLIB_DLL) + install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR}) + endif() + endif() +endif(BUILD_CLIENT) + +if(BUILD_SERVER) + install(TARGETS minetestserver DESTINATION ${BINDIR}) +endif(BUILD_SERVER) + +# Subdirectories add_subdirectory(jthread) -#END +#end diff --git a/src/main.cpp b/src/main.cpp index 9ec49feb3..a0da103c9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -212,7 +212,7 @@ Doing now: */ #define FIELD_OF_VIEW_TEST 0 -#ifdef UNITTEST_DISABLE +#ifdef NDEBUG #ifdef _WIN32 #pragma message ("Disabling unit tests") #else @@ -259,6 +259,7 @@ Doing now: #include "materials.h" #include "guiMessageMenu.h" #include "filesys.h" +#include "config.h" IrrlichtWrapper *g_irrlicht; @@ -1110,6 +1111,12 @@ int main(int argc, char *argv[]) BEGIN_DEBUG_EXCEPTION_HANDLER + // Print startup message + dstream< filenames; filenames.push_back(porting::path_userdata + "/minetest.conf"); +#ifdef RUN_IN_PLACE + filenames.push_back(porting::path_userdata + "/../minetest.conf"); +#endif for(u32 i=0; i" len = GetEnvironmentVariable("APPDATA", buf, buflen); @@ -137,20 +141,23 @@ void initializePaths() Linux */ #elif defined(linux) + #include - path_userdata = std::string("~/.") + APPNAME; - path_data = std::string("/usr/share/") + APPNAME; + path_userdata = std::string(getenv("HOME")) + "/." + APPNAME; + path_data = std::string(INSTALL_PREFIX) + "/share/" + APPNAME; /* OS X */ #elif defined(__APPLE__) + #include - path_userdata = std::string("~/Library/Application Support/") + APPNAME; + path_userdata = std::string(getenv("HOME")) + "/Library/Application Support/" + APPNAME; path_data = std::string("minetest-mac.app/Contents/Resources/data/"); #endif -#endif + +#endif // RUN_IN_PLACE dstream<<"path_data = "< filenames; filenames.push_back(porting::path_userdata + "/minetest.conf"); +#ifdef RUN_IN_PLACE + filenames.push_back(porting::path_userdata + "/../minetest.conf"); +#endif for(u32 i=0; i