EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Support::Windows Servers (https://www.eqemulator.org/forums/forumdisplay.php?f=587)
-   -   CMAKE help with new lua code (https://www.eqemulator.org/forums/showthread.php?t=37046)

Furniture 07-09-2013 04:44 PM

CMAKE help with new lua code
 
After upgrading to the newest code, on my old server or a fresh one, I cannot compile properly with CMAKE. I have downloaded the new dependencies with boost, and have checked the cmakeslists file in my eq/source folder.

It appears for some reason it cant find boost or lua, even though they are there.

Code:

Could NOT find Lua51 (missing:  LUA_LIBRARIES LUA_INCLUDE_DIR)
CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:1192 (message):
  Unable to find the requested Boost libraries.

  Unable to find the Boost header files.  Please set BOOST_ROOT to the root
  directory containing Boost or BOOST_INCLUDEDIR to the directory containing
  Boost's headers.
Call Stack (most recent call first):
  CMakeLists.txt:164 (FIND_PACKAGE)


  Entering            C:/EQ/Source/luabind
  Returning to        C:/EQ/Source
  Entering            C:/EQ/Source/common
  Returning to        C:/EQ/Source
  Entering            C:/EQ/Source/shared_memory
  Returning to        C:/EQ/Source
  Entering            C:/EQ/Source/world
  Returning to        C:/EQ/Source
  Entering            C:/EQ/Source/zone
  Returning to        C:/EQ/Source
  Entering            C:/EQ/Source/ucs
  Returning to        C:/EQ/Source
  Entering            C:/EQ/Source/queryserv
  Returning to        C:/EQ/Source
  Entering            C:/EQ/Source/eqlaunch
  Returning to        C:/EQ/Source
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
Boost_INCLUDE_DIR (ADVANCED)
  used as include directory in directory C:/EQ/Source/luabind
  used as include directory in directory C:/EQ/Source/common
  used as include directory in directory C:/EQ/Source/shared_memory
  used as include directory in directory C:/EQ/Source/world
  used as include directory in directory C:/EQ/Source/zone
  used as include directory in directory C:/EQ/Source/ucs
  used as include directory in directory C:/EQ/Source/queryserv
  used as include directory in directory C:/EQ/Source/eqlaunch
LUA_INCLUDE_DIR (ADVANCED)
  used as include directory in directory C:/EQ/Source/luabind
  used as include directory in directory C:/EQ/Source/common
  used as include directory in directory C:/EQ/Source/shared_memory
  used as include directory in directory C:/EQ/Source/world
  used as include directory in directory C:/EQ/Source/zone
  used as include directory in directory C:/EQ/Source/ucs
  used as include directory in directory C:/EQ/Source/queryserv
  used as include directory in directory C:/EQ/Source/eqlaunch
LUA_LIBRARY (ADVANCED)
    linked by target "zone" in directory C:/EQ/Source/zone

Configuring incomplete, errors occurred!


my cmakelists file looks like this

Code:

#EQEmu Cmake

#We set a fairly new version (as of 2013) because I found finding perl was a bit... buggy on older ones
#Can change this if you really want but you should upgrade!
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

#FindMySQL is located here so lets make it so CMake can find it
SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/" ${CMAKE_MODULE_PATH})

#For checking includes
INCLUDE (CheckIncludeFiles)

#Our project name is EQEmu
PROJECT(EQEmu)

#Default build type is set to RelWithDebInfo for generators that honor that like makefiles
IF(NOT CMAKE_BUILD_TYPE)
        SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE)
ENDIF(NOT CMAKE_BUILD_TYPE)

#Add our various windows definitions
IF(MSVC OR MINGW)
        ADD_DEFINITIONS(-D_WINDOWS)
        IF(CMAKE_CL_64)
                ADD_DEFINITIONS(-DWIN64)
        ELSE(CMAKE_CL_64)
                ADD_DEFINITIONS(-DWIN32)
        ENDIF(CMAKE_CL_64)
ENDIF(MSVC OR MINGW)

IF(MSVC)
        #Set our default locations for zlib/mysql based on x86/x64
        IF(CMAKE_CL_64)
                SET(ZLIB_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/zlib_x64")
                SET(MYSQL_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/mysql_x64")
                SET(LUA_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/luaj_x64")
        ELSE(CMAKE_CL_64)
                SET(ZLIB_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/zlib_x86")
                SET(MYSQL_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/mysql_x86")
                SET(LUA_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/luaj_x86")
        ENDIF(CMAKE_CL_64)

        #disable CRT warnings on windows cause they're annoying as shit and we use C functions everywhere
        OPTION(EQEMU_DISABLE_CRT_SECURE_WARNINGS "Disable Secure CRT Warnings" ON)
        IF(EQEMU_DISABLE_CRT_SECURE_WARNINGS)
                ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
        ENDIF(EQEMU_DISABLE_CRT_SECURE_WARNINGS)

        #fast FP if you'd like it
        OPTION(EQEMU_FAST_FLOATINGPOINT "Use MSVC /fp:fast option" ON)
        IF(EQEMU_FAST_FLOATINGPOINT)
                ADD_DEFINITIONS(/fp:fast)
        ENDIF(EQEMU_FAST_FLOATINGPOINT)

        #crash logging currently only works on windows x86/x64
        OPTION(EQEMU_ENABLE_CRASH_LOGGING "Enable crash logging" ON)
        IF(EQEMU_ENABLE_CRASH_LOGGING)
                ADD_DEFINITIONS(-DCRASH_LOGGING)
        ENDIF(EQEMU_ENABLE_CRASH_LOGGING)

        #Disable safe SEH or not?
        OPTION(EQEMU_DISABLE_SAFESEH "Disable Safe SEH (Needed for Strawberry Perl)" OFF)
        IF(EQEMU_DISABLE_SAFESEH)
                SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
                SET(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} /SAFESEH:NO")
                SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /SAFESEH:NO")
                SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /SAFESEH:NO")
                SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
                SET(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL} /SAFESEH:NO")
                SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /SAFESEH:NO")
                SET(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /SAFESEH:NO")
                SET(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
                SET(CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL "${CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL} /SAFESEH:NO")
                SET(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /SAFESEH:NO")
                SET(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO} /SAFESEH:NO")
        ENDIF(EQEMU_DISABLE_SAFESEH)

        #We want to compile /MT not /MD so we change that
        FOREACH(flag_var CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO)
                IF(${flag_var} MATCHES "/MD")
                        STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
                ENDIF(${flag_var} MATCHES "/MD")
        ENDFOREACH(flag_var)
       
        ADD_DEFINITIONS(-DNOMINMAX)
ELSE(MSVC)
        #Normally set by perl but we don't use the perl flags anymore so we set it.
        ADD_DEFINITIONS(-DHAS_UNION_SEMUN)
ENDIF(MSVC)

#FreeBSD support
IF(UNIX)
        IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
                ADD_DEFINITIONS(-DFREEBSD)
                SET(FREEBSD TRUE)
        ENDIF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
ENDIF(UNIX)

#use stdint.h types if they exist for this platform (we have to guess otherwise)
CHECK_INCLUDE_FILES(stdint.h HAVE_STDINT_H)
IF(HAVE_STDINT_H)
        ADD_DEFINITIONS(-DEQEMU_USE_STDINT)
ENDIF(HAVE_STDINT_H)

#debug level, 5 is default. Most people wont ever change this but it's there if you want to
SET(EQEMU_DEBUG_LEVEL 5 CACHE STRING "EQEmu debug level:
        0 - Quiet mode Errors to file Status and Normal ignored
        1 - Status and Normal to console, Errors to logfile
        2 - Status, Normal, and Error to console and logfile
        3 - Light debug release errors and status
        4 - Moderate debug release errors and status
        5 - Maximum debug release errors and status
        10 - More errors than you ever wanted to see"
)

#Bots are a compile time option so on/off
OPTION(EQEMU_ENABLE_BOTS "Enable Bots" OFF)
IF(EQEMU_ENABLE_BOTS)
        ADD_DEFINITIONS(-DBOTS)
ENDIF(EQEMU_ENABLE_BOTS)

#What to build
OPTION(EQEMU_BUILD_SERVER "Build the game server." ON)
OPTION(EQEMU_BUILD_LOGIN "Build the login server." OFF)
OPTION(EQEMU_BUILD_AZONE "Build azone utility." OFF)
OPTION(EQEMU_BUILD_TESTS "Build utility tests." OFF)
OPTION(EQEMU_BUILD_PERL "Build Perl parser." ON)
OPTION(EQEMU_BUILD_LUA "Build Lua parser." ON)

#C++11 stuff
IF(NOT MSVC)
        ADD_DEFINITIONS(-std=c++0x)
ENDIF(NOT MSVC)

#Various definitions
IF(EQEMU_BUILD_PERL)
        ADD_DEFINITIONS(-DEMBPERL)
        ADD_DEFINITIONS(-DEMBPERL_PLUGIN)
ENDIF(EQEMU_BUILD_PERL)
IF(EQEMU_BUILD_LUA)
        ADD_DEFINITIONS(-DLUA_EQEMU)
ENDIF(EQEMU_BUILD_LUA)

ADD_DEFINITIONS(-DEQDEBUG=${EQEMU_DEBUG_LEVEL})
ADD_DEFINITIONS(-DINVERSEXY)
ADD_DEFINITIONS(-DFIELD_ITEMS)
ADD_DEFINITIONS(-DMAP_DIR="./Maps")

#Find everything we need
FIND_PACKAGE(ZLIB REQUIRED)
FIND_PACKAGE(MySQL REQUIRED)
IF(EQEMU_BUILD_PERL)
        FIND_PACKAGE(PerlLibs REQUIRED)
        INCLUDE_DIRECTORIES("${PERL_INCLUDE_PATH}")
ENDIF(EQEMU_BUILD_PERL)

IF(EQEMU_BUILD_LUA)
        FIND_PACKAGE(EQLua51 REQUIRED)
        SET(Boost_USE_STATIC_LIBS NO)
        SET(Boost_USE_MULTITHREADED ON)
        SET(Boost_USE_STATIC_RUNTIME OFF)
        SET(BOOST_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/boost")

        FIND_PACKAGE(Boost REQUIRED)
        INCLUDE_DIRECTORIES("${LUA_INCLUDE_DIR}" "${Boost_INCLUDE_DIRS}" "luabind")
       
        OPTION(EQEMU_SANITIZE_LUA_LIBS "Sanitize Lua Libraries (Remove OS and IO standard libraries from being able to run)." ON)
        IF(EQEMU_SANITIZE_LUA_LIBS)
                ADD_DEFINITIONS(-DSANITIZE_LUA_LIBS)
        ENDIF(EQEMU_SANITIZE_LUA_LIBS)
ENDIF(EQEMU_BUILD_LUA)

INCLUDE_DIRECTORIES("${ZLIB_INCLUDE_DIRS}" "${MySQL_INCLUDE_DIR}")

IF(EQEMU_BUILD_LUA)
    ADD_SUBDIRECTORY(luabind)
ENDIF(EQEMU_BUILD_LUA)

IF(EQEMU_BUILD_SERVER OR EQEMU_BUILD_LOGIN OR EQEMU_BUILD_TESTS)
        ADD_SUBDIRECTORY(common)
ENDIF(EQEMU_BUILD_SERVER OR EQEMU_BUILD_LOGIN OR EQEMU_BUILD_TESTS)
IF(EQEMU_BUILD_SERVER)
        ADD_SUBDIRECTORY(shared_memory)
        ADD_SUBDIRECTORY(world)
        ADD_SUBDIRECTORY(zone)
        ADD_SUBDIRECTORY(ucs)
        ADD_SUBDIRECTORY(queryserv)
        ADD_SUBDIRECTORY(eqlaunch)
ENDIF(EQEMU_BUILD_SERVER)
IF(EQEMU_BUILD_LOGIN)
        ADD_SUBDIRECTORY(loginserver)
ENDIF(EQEMU_BUILD_LOGIN)

IF(EQEMU_BUILD_AZONE)
        ADD_SUBDIRECTORY(utils)
ENDIF(EQEMU_BUILD_AZONE)

IF(EQEMU_BUILD_TESTS)
        ADD_SUBDIRECTORY(tests)
ENDIF(EQEMU_BUILD_TESTS)

I am at a loss, any help would be appreciated

sorvani 07-10-2013 04:55 PM

I updated my x64 test server build the other day with no issues, though CMAKE tried to tell me stuff was missing. it all still builds and works.
http://eqemulator.org/forums/showthr...270#post222270

KLS 07-11-2013 03:08 PM

Your dependencies structure should look like (for x64):

Code:

.
..
.gitignore
boost
luaj_x64
mysql_x64
zlib_x64

If it does the problem persists you can set the entries manually by checking advanced and filling in the following entries / adding entries (for x64):

Boost_INCLUDE_DIR -> ServerRoot/dependencies/boost
Boost_LIBRARY_DIRS -> ServerRoot/dependencies/boost/lib
LUA_INCLUDE_DIR -> ServerRoot/dependencies/luaj_x64/src
LUA_LIBRARIES -> ServerRoot/dependencies/luaj_x64/bin/lua51.lib
LUA_LIBRARY -> ServerRoot/dependencies/luaj_x64/bin/lua51.lib

Also keep in mind lua51.dll in ServerRoot/dependencies/luaj_x64/bin will need to be moved to your server directory too.


All times are GMT -4. The time now is 12:24 AM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.