mirror of
https://github.com/minetest/minetest.git
synced 2024-08-19 04:54:18 +02:00
CMake working on Linux (not on windows)
--HG-- rename : Makefile => Makefile.bak
This commit is contained in:
parent
683b08beef
commit
d825ed572f
15
CMakeLists.txt
Normal file
15
CMakeLists.txt
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.6)
|
||||||
|
if(${CMAKE_VERSION} STREQUAL "2.8.2")
|
||||||
|
# bug http://vtk.org/Bug/view.php?id=11020
|
||||||
|
message( WARNING "CMake/CPack version 2.8.2 will not create working .deb packages!")
|
||||||
|
endif(${CMAKE_VERSION} STREQUAL "2.8.2")
|
||||||
|
|
||||||
|
set(CMAKE_BUILD_TYPE Debug)
|
||||||
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
|
||||||
|
|
||||||
|
# This is done here so that IRRDIR is relative to the typical cmake call directory
|
||||||
|
find_package(Irrlicht)
|
||||||
|
|
||||||
|
# This way the CMakeLists.txt file in src/ is processed
|
||||||
|
add_subdirectory(src)
|
||||||
|
|
38
cmake/Modules/FindIrrlicht.cmake
Normal file
38
cmake/Modules/FindIrrlicht.cmake
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
MESSAGE(STATUS "IRRDIR = $ENV{IRRDIR}")
|
||||||
|
|
||||||
|
FIND_PATH(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h
|
||||||
|
PATHS
|
||||||
|
$ENV{IRRDIR}/include
|
||||||
|
/usr/local/include/irrlicht
|
||||||
|
/usr/include/irrlicht
|
||||||
|
)
|
||||||
|
|
||||||
|
MESSAGE(STATUS "IRRLICHT_INCLUDE_DIR = ${IRRLICHT_INCLUDE_DIR}")
|
||||||
|
|
||||||
|
FIND_LIBRARY(IRRLICHT_LIBRARY NAMES libIrrlicht.a Irrlicht
|
||||||
|
PATHS
|
||||||
|
$ENV{IRRDIR}/lib
|
||||||
|
$ENV{IRRDIR}/lib/Linux
|
||||||
|
$ENV{IRRDIR}/lib/MacOSX
|
||||||
|
$ENV{IRRDIR}/lib/Win32-gcc
|
||||||
|
$ENV{IRRDIR}/lib/Win32-visualstudio
|
||||||
|
$ENV{IRRDIR}/lib/Win64-visualstudio
|
||||||
|
/usr/local/lib
|
||||||
|
/usr/lib
|
||||||
|
)
|
||||||
|
|
||||||
|
MESSAGE(STATUS "IRRLICHT_LIBRARY = ${IRRLICHT_LIBRARY}")
|
||||||
|
|
||||||
|
# handle the QUIETLY and REQUIRED arguments and set IRRLICHT_FOUND to TRUE if
|
||||||
|
# all listed variables are TRUE
|
||||||
|
INCLUDE(FindPackageHandleStandardArgs)
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(IRRLICHT DEFAULT_MSG IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR)
|
||||||
|
|
||||||
|
IF(IRRLICHT_FOUND)
|
||||||
|
SET(IRRLICHT_LIBRARIES ${IRRLICHT_LIBRARY})
|
||||||
|
ELSE(IRRLICHT_FOUND)
|
||||||
|
SET(IRRLICHT_LIBRARIES)
|
||||||
|
ENDIF(IRRLICHT_FOUND)
|
||||||
|
|
||||||
|
MARK_AS_ADVANCED(IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR)
|
||||||
|
|
73
src/CMakeLists.txt
Normal file
73
src/CMakeLists.txt
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
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 )
|
||||||
|
|
||||||
|
set(minetest_SRCS
|
||||||
|
porting.cpp
|
||||||
|
guiMessageMenu.cpp
|
||||||
|
materials.cpp
|
||||||
|
guiTextInputMenu.cpp
|
||||||
|
guiInventoryMenu.cpp
|
||||||
|
irrlichtwrapper.cpp
|
||||||
|
guiPauseMenu.cpp
|
||||||
|
defaultsettings.cpp
|
||||||
|
mapnode.cpp
|
||||||
|
tile.cpp
|
||||||
|
voxel.cpp
|
||||||
|
mapblockobject.cpp
|
||||||
|
inventory.cpp
|
||||||
|
debug.cpp
|
||||||
|
serialization.cpp
|
||||||
|
light.cpp
|
||||||
|
filesys.cpp
|
||||||
|
connection.cpp
|
||||||
|
environment.cpp
|
||||||
|
client.cpp
|
||||||
|
server.cpp
|
||||||
|
socket.cpp
|
||||||
|
mapblock.cpp
|
||||||
|
mapsector.cpp
|
||||||
|
heightmap.cpp
|
||||||
|
map.cpp
|
||||||
|
player.cpp
|
||||||
|
utility.cpp
|
||||||
|
main.cpp
|
||||||
|
test.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
${ZLIB_INCLUDE_DIR}
|
||||||
|
${IRRLICHT_INCLUDE_DIR}
|
||||||
|
"${PROJECT_SOURCE_DIR}/jthread"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(EXECUTABLE_OUTPUT_PATH ../bin)
|
||||||
|
|
||||||
|
add_executable(minetest ${minetest_SRCS})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
minetest
|
||||||
|
${ZLIB_LIBRARIES}
|
||||||
|
${IRRLICHT_LIBRARY}
|
||||||
|
${OPENGL_LIBRARIES}
|
||||||
|
${JPEG_LIBRARIES}
|
||||||
|
${BZIP2_LIBRARIES}
|
||||||
|
jthread
|
||||||
|
)
|
||||||
|
|
||||||
|
add_subdirectory(jthread)
|
||||||
|
|
||||||
|
#END
|
16
src/jthread/CMakeLists.txt
Normal file
16
src/jthread/CMakeLists.txt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
if( UNIX )
|
||||||
|
set(jthread_SRCS pthread/jmutex.cpp pthread/jthread.cpp)
|
||||||
|
set(jthread_platform_LIBS "")
|
||||||
|
else( UNIX )
|
||||||
|
set(jthread_SRCS win32/jmutex.cpp win32/jthread.cpp)
|
||||||
|
set(jthread_platform_LIBS "")
|
||||||
|
endif( UNIX )
|
||||||
|
|
||||||
|
add_library(jthread ${jthread_SRCS})
|
||||||
|
|
||||||
|
target_link_libraries(
|
||||||
|
jthread
|
||||||
|
${jthread_platform_LIBS}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
20
src/jthread/LICENSE.MIT
Normal file
20
src/jthread/LICENSE.MIT
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
The license of JThread:
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
IN THE SOFTWARE.
|
||||||
|
|
70
src/jthread/jmutex.h
Normal file
70
src/jthread/jmutex.h
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
This file is a part of the JThread package, which contains some object-
|
||||||
|
oriented thread wrappers for different thread implementations.
|
||||||
|
|
||||||
|
Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef JMUTEX_H
|
||||||
|
|
||||||
|
#define JMUTEX_H
|
||||||
|
|
||||||
|
#if (defined(WIN32) || defined(_WIN32_WCE))
|
||||||
|
#ifndef _WIN32_WCE
|
||||||
|
#include <process.h>
|
||||||
|
#endif // _WIN32_WCE
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
#define JMUTEX_CRITICALSECTION
|
||||||
|
#else // using pthread
|
||||||
|
#include <pthread.h>
|
||||||
|
#endif // WIN32
|
||||||
|
|
||||||
|
#define ERR_JMUTEX_ALREADYINIT -1
|
||||||
|
#define ERR_JMUTEX_NOTINIT -2
|
||||||
|
#define ERR_JMUTEX_CANTCREATEMUTEX -3
|
||||||
|
|
||||||
|
class JMutex
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
JMutex();
|
||||||
|
~JMutex();
|
||||||
|
int Init();
|
||||||
|
int Lock();
|
||||||
|
int Unlock();
|
||||||
|
bool IsInitialized() { return initialized; }
|
||||||
|
private:
|
||||||
|
#if (defined(WIN32) || defined(_WIN32_WCE))
|
||||||
|
#ifdef JMUTEX_CRITICALSECTION
|
||||||
|
CRITICAL_SECTION mutex;
|
||||||
|
#else // Use standard mutex
|
||||||
|
HANDLE mutex;
|
||||||
|
#endif // JMUTEX_CRITICALSECTION
|
||||||
|
#else // pthread mutex
|
||||||
|
pthread_mutex_t mutex;
|
||||||
|
#endif // WIN32
|
||||||
|
bool initialized;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // JMUTEX_H
|
43
src/jthread/jmutexautolock.h
Normal file
43
src/jthread/jmutexautolock.h
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
This file is a part of the JThread package, which contains some object-
|
||||||
|
oriented thread wrappers for different thread implementations.
|
||||||
|
|
||||||
|
Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef JMUTEXAUTOLOCK_H
|
||||||
|
|
||||||
|
#define JMUTEXAUTOLOCK_H
|
||||||
|
|
||||||
|
#include "jmutex.h"
|
||||||
|
|
||||||
|
class JMutexAutoLock
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
JMutexAutoLock(JMutex &m) : mutex(m) { mutex.Lock(); }
|
||||||
|
~JMutexAutoLock() { mutex.Unlock(); }
|
||||||
|
private:
|
||||||
|
JMutex &mutex;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // JMUTEXAUTOLOCK_H
|
77
src/jthread/jthread.h
Normal file
77
src/jthread/jthread.h
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
This file is a part of the JThread package, which contains some object-
|
||||||
|
oriented thread wrappers for different thread implementations.
|
||||||
|
|
||||||
|
Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef JTHREAD_H
|
||||||
|
|
||||||
|
#define JTHREAD_H
|
||||||
|
|
||||||
|
#include "jmutex.h"
|
||||||
|
|
||||||
|
#define ERR_JTHREAD_CANTINITMUTEX -1
|
||||||
|
#define ERR_JTHREAD_CANTSTARTTHREAD -2
|
||||||
|
#define ERR_JTHREAD_THREADFUNCNOTSET -3
|
||||||
|
#define ERR_JTHREAD_NOTRUNNING -4
|
||||||
|
#define ERR_JTHREAD_ALREADYRUNNING -5
|
||||||
|
|
||||||
|
class JThread
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
JThread();
|
||||||
|
virtual ~JThread();
|
||||||
|
int Start();
|
||||||
|
int Kill();
|
||||||
|
virtual void *Thread() = 0;
|
||||||
|
bool IsRunning();
|
||||||
|
void *GetReturnValue();
|
||||||
|
protected:
|
||||||
|
void ThreadStarted();
|
||||||
|
private:
|
||||||
|
|
||||||
|
#if (defined(WIN32) || defined(_WIN32_WCE))
|
||||||
|
#ifdef _WIN32_WCE
|
||||||
|
DWORD threadid;
|
||||||
|
static DWORD WINAPI TheThread(void *param);
|
||||||
|
#else
|
||||||
|
static UINT __stdcall TheThread(void *param);
|
||||||
|
UINT threadid;
|
||||||
|
#endif // _WIN32_WCE
|
||||||
|
HANDLE threadhandle;
|
||||||
|
#else // pthread type threads
|
||||||
|
static void *TheThread(void *param);
|
||||||
|
|
||||||
|
pthread_t threadid;
|
||||||
|
#endif // WIN32
|
||||||
|
void *retval;
|
||||||
|
bool running;
|
||||||
|
|
||||||
|
JMutex runningmutex;
|
||||||
|
JMutex continuemutex,continuemutex2;
|
||||||
|
bool mutexinit;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // JTHREAD_H
|
||||||
|
|
67
src/jthread/pthread/jmutex.cpp
Normal file
67
src/jthread/pthread/jmutex.cpp
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
This file is a part of the JThread package, which contains some object-
|
||||||
|
oriented thread wrappers for different thread implementations.
|
||||||
|
|
||||||
|
Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "jmutex.h"
|
||||||
|
|
||||||
|
JMutex::JMutex()
|
||||||
|
{
|
||||||
|
initialized = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
JMutex::~JMutex()
|
||||||
|
{
|
||||||
|
if (initialized)
|
||||||
|
pthread_mutex_destroy(&mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
int JMutex::Init()
|
||||||
|
{
|
||||||
|
if (initialized)
|
||||||
|
return ERR_JMUTEX_ALREADYINIT;
|
||||||
|
|
||||||
|
pthread_mutex_init(&mutex,NULL);
|
||||||
|
initialized = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int JMutex::Lock()
|
||||||
|
{
|
||||||
|
if (!initialized)
|
||||||
|
return ERR_JMUTEX_NOTINIT;
|
||||||
|
|
||||||
|
pthread_mutex_lock(&mutex);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int JMutex::Unlock()
|
||||||
|
{
|
||||||
|
if (!initialized)
|
||||||
|
return ERR_JMUTEX_NOTINIT;
|
||||||
|
|
||||||
|
pthread_mutex_unlock(&mutex);
|
||||||
|
return 0;
|
||||||
|
}
|
180
src/jthread/pthread/jthread.cpp
Normal file
180
src/jthread/pthread/jthread.cpp
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
This file is a part of the JThread package, which contains some object-
|
||||||
|
oriented thread wrappers for different thread implementations.
|
||||||
|
|
||||||
|
Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "jthread.h"
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
JThread::JThread()
|
||||||
|
{
|
||||||
|
retval = NULL;
|
||||||
|
mutexinit = false;
|
||||||
|
running = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
JThread::~JThread()
|
||||||
|
{
|
||||||
|
Kill();
|
||||||
|
}
|
||||||
|
|
||||||
|
int JThread::Start()
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
|
||||||
|
if (!mutexinit)
|
||||||
|
{
|
||||||
|
if (!runningmutex.IsInitialized())
|
||||||
|
{
|
||||||
|
if (runningmutex.Init() < 0)
|
||||||
|
return ERR_JTHREAD_CANTINITMUTEX;
|
||||||
|
}
|
||||||
|
if (!continuemutex.IsInitialized())
|
||||||
|
{
|
||||||
|
if (continuemutex.Init() < 0)
|
||||||
|
return ERR_JTHREAD_CANTINITMUTEX;
|
||||||
|
}
|
||||||
|
if (!continuemutex2.IsInitialized())
|
||||||
|
{
|
||||||
|
if (continuemutex2.Init() < 0)
|
||||||
|
return ERR_JTHREAD_CANTINITMUTEX;
|
||||||
|
}
|
||||||
|
mutexinit = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
runningmutex.Lock();
|
||||||
|
if (running)
|
||||||
|
{
|
||||||
|
runningmutex.Unlock();
|
||||||
|
return ERR_JTHREAD_ALREADYRUNNING;
|
||||||
|
}
|
||||||
|
runningmutex.Unlock();
|
||||||
|
|
||||||
|
pthread_attr_t attr;
|
||||||
|
pthread_attr_init(&attr);
|
||||||
|
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
|
||||||
|
|
||||||
|
continuemutex.Lock();
|
||||||
|
status = pthread_create(&threadid,&attr,TheThread,this);
|
||||||
|
pthread_attr_destroy(&attr);
|
||||||
|
if (status != 0)
|
||||||
|
{
|
||||||
|
continuemutex.Unlock();
|
||||||
|
return ERR_JTHREAD_CANTSTARTTHREAD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Wait until 'running' is set */
|
||||||
|
|
||||||
|
runningmutex.Lock();
|
||||||
|
while (!running)
|
||||||
|
{
|
||||||
|
runningmutex.Unlock();
|
||||||
|
|
||||||
|
struct timespec req,rem;
|
||||||
|
|
||||||
|
req.tv_sec = 0;
|
||||||
|
req.tv_nsec = 1000000;
|
||||||
|
nanosleep(&req,&rem);
|
||||||
|
|
||||||
|
runningmutex.Lock();
|
||||||
|
}
|
||||||
|
runningmutex.Unlock();
|
||||||
|
|
||||||
|
continuemutex.Unlock();
|
||||||
|
|
||||||
|
continuemutex2.Lock();
|
||||||
|
continuemutex2.Unlock();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int JThread::Kill()
|
||||||
|
{
|
||||||
|
runningmutex.Lock();
|
||||||
|
if (!running)
|
||||||
|
{
|
||||||
|
runningmutex.Unlock();
|
||||||
|
return ERR_JTHREAD_NOTRUNNING;
|
||||||
|
}
|
||||||
|
pthread_cancel(threadid);
|
||||||
|
running = false;
|
||||||
|
runningmutex.Unlock();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool JThread::IsRunning()
|
||||||
|
{
|
||||||
|
bool r;
|
||||||
|
|
||||||
|
runningmutex.Lock();
|
||||||
|
r = running;
|
||||||
|
runningmutex.Unlock();
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *JThread::GetReturnValue()
|
||||||
|
{
|
||||||
|
void *val;
|
||||||
|
|
||||||
|
runningmutex.Lock();
|
||||||
|
if (running)
|
||||||
|
val = NULL;
|
||||||
|
else
|
||||||
|
val = retval;
|
||||||
|
runningmutex.Unlock();
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *JThread::TheThread(void *param)
|
||||||
|
{
|
||||||
|
JThread *jthread;
|
||||||
|
void *ret;
|
||||||
|
|
||||||
|
jthread = (JThread *)param;
|
||||||
|
|
||||||
|
jthread->continuemutex2.Lock();
|
||||||
|
jthread->runningmutex.Lock();
|
||||||
|
jthread->running = true;
|
||||||
|
jthread->runningmutex.Unlock();
|
||||||
|
|
||||||
|
jthread->continuemutex.Lock();
|
||||||
|
jthread->continuemutex.Unlock();
|
||||||
|
|
||||||
|
ret = jthread->Thread();
|
||||||
|
|
||||||
|
jthread->runningmutex.Lock();
|
||||||
|
jthread->running = false;
|
||||||
|
jthread->retval = ret;
|
||||||
|
jthread->runningmutex.Unlock();
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JThread::ThreadStarted()
|
||||||
|
{
|
||||||
|
continuemutex2.Unlock();
|
||||||
|
}
|
||||||
|
|
83
src/jthread/win32/jmutex.cpp
Normal file
83
src/jthread/win32/jmutex.cpp
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
This file is a part of the JThread package, which contains some object-
|
||||||
|
oriented thread wrappers for different thread implementations.
|
||||||
|
|
||||||
|
Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "jmutex.h"
|
||||||
|
|
||||||
|
JMutex::JMutex()
|
||||||
|
{
|
||||||
|
initialized = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
JMutex::~JMutex()
|
||||||
|
{
|
||||||
|
if (initialized)
|
||||||
|
#ifdef JMUTEX_CRITICALSECTION
|
||||||
|
DeleteCriticalSection(&mutex);
|
||||||
|
#else
|
||||||
|
CloseHandle(mutex);
|
||||||
|
#endif // JMUTEX_CRITICALSECTION
|
||||||
|
}
|
||||||
|
|
||||||
|
int JMutex::Init()
|
||||||
|
{
|
||||||
|
if (initialized)
|
||||||
|
return ERR_JMUTEX_ALREADYINIT;
|
||||||
|
#ifdef JMUTEX_CRITICALSECTION
|
||||||
|
InitializeCriticalSection(&mutex);
|
||||||
|
#else
|
||||||
|
mutex = CreateMutex(NULL,FALSE,NULL);
|
||||||
|
if (mutex == NULL)
|
||||||
|
return ERR_JMUTEX_CANTCREATEMUTEX;
|
||||||
|
#endif // JMUTEX_CRITICALSECTION
|
||||||
|
initialized = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int JMutex::Lock()
|
||||||
|
{
|
||||||
|
if (!initialized)
|
||||||
|
return ERR_JMUTEX_NOTINIT;
|
||||||
|
#ifdef JMUTEX_CRITICALSECTION
|
||||||
|
EnterCriticalSection(&mutex);
|
||||||
|
#else
|
||||||
|
WaitForSingleObject(mutex,INFINITE);
|
||||||
|
#endif // JMUTEX_CRITICALSECTION
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int JMutex::Unlock()
|
||||||
|
{
|
||||||
|
if (!initialized)
|
||||||
|
return ERR_JMUTEX_NOTINIT;
|
||||||
|
#ifdef JMUTEX_CRITICALSECTION
|
||||||
|
LeaveCriticalSection(&mutex);
|
||||||
|
#else
|
||||||
|
ReleaseMutex(mutex);
|
||||||
|
#endif // JMUTEX_CRITICALSECTION
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
177
src/jthread/win32/jthread.cpp
Normal file
177
src/jthread/win32/jthread.cpp
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
This file is a part of the JThread package, which contains some object-
|
||||||
|
oriented thread wrappers for different thread implementations.
|
||||||
|
|
||||||
|
Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "jthread.h"
|
||||||
|
|
||||||
|
#ifndef _WIN32_WCE
|
||||||
|
#include <process.h>
|
||||||
|
#endif // _WIN32_WCE
|
||||||
|
|
||||||
|
JThread::JThread()
|
||||||
|
{
|
||||||
|
retval = NULL;
|
||||||
|
mutexinit = false;
|
||||||
|
running = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
JThread::~JThread()
|
||||||
|
{
|
||||||
|
Kill();
|
||||||
|
}
|
||||||
|
|
||||||
|
int JThread::Start()
|
||||||
|
{
|
||||||
|
if (!mutexinit)
|
||||||
|
{
|
||||||
|
if (!runningmutex.IsInitialized())
|
||||||
|
{
|
||||||
|
if (runningmutex.Init() < 0)
|
||||||
|
return ERR_JTHREAD_CANTINITMUTEX;
|
||||||
|
}
|
||||||
|
if (!continuemutex.IsInitialized())
|
||||||
|
{
|
||||||
|
if (continuemutex.Init() < 0)
|
||||||
|
return ERR_JTHREAD_CANTINITMUTEX;
|
||||||
|
}
|
||||||
|
if (!continuemutex2.IsInitialized())
|
||||||
|
{
|
||||||
|
if (continuemutex2.Init() < 0)
|
||||||
|
return ERR_JTHREAD_CANTINITMUTEX;
|
||||||
|
} mutexinit = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
runningmutex.Lock();
|
||||||
|
if (running)
|
||||||
|
{
|
||||||
|
runningmutex.Unlock();
|
||||||
|
return ERR_JTHREAD_ALREADYRUNNING;
|
||||||
|
}
|
||||||
|
runningmutex.Unlock();
|
||||||
|
|
||||||
|
continuemutex.Lock();
|
||||||
|
#ifndef _WIN32_WCE
|
||||||
|
threadhandle = (HANDLE)_beginthreadex(NULL,0,TheThread,this,0,&threadid);
|
||||||
|
#else
|
||||||
|
threadhandle = CreateThread(NULL,0,TheThread,this,0,&threadid);
|
||||||
|
#endif // _WIN32_WCE
|
||||||
|
if (threadhandle == NULL)
|
||||||
|
{
|
||||||
|
continuemutex.Unlock();
|
||||||
|
return ERR_JTHREAD_CANTSTARTTHREAD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Wait until 'running' is set */
|
||||||
|
|
||||||
|
runningmutex.Lock();
|
||||||
|
while (!running)
|
||||||
|
{
|
||||||
|
runningmutex.Unlock();
|
||||||
|
Sleep(1);
|
||||||
|
runningmutex.Lock();
|
||||||
|
}
|
||||||
|
runningmutex.Unlock();
|
||||||
|
|
||||||
|
continuemutex.Unlock();
|
||||||
|
|
||||||
|
continuemutex2.Lock();
|
||||||
|
continuemutex2.Unlock();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int JThread::Kill()
|
||||||
|
{
|
||||||
|
runningmutex.Lock();
|
||||||
|
if (!running)
|
||||||
|
{
|
||||||
|
runningmutex.Unlock();
|
||||||
|
return ERR_JTHREAD_NOTRUNNING;
|
||||||
|
}
|
||||||
|
TerminateThread(threadhandle,0);
|
||||||
|
CloseHandle(threadhandle);
|
||||||
|
running = false;
|
||||||
|
runningmutex.Unlock();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool JThread::IsRunning()
|
||||||
|
{
|
||||||
|
bool r;
|
||||||
|
|
||||||
|
runningmutex.Lock();
|
||||||
|
r = running;
|
||||||
|
runningmutex.Unlock();
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *JThread::GetReturnValue()
|
||||||
|
{
|
||||||
|
void *val;
|
||||||
|
|
||||||
|
runningmutex.Lock();
|
||||||
|
if (running)
|
||||||
|
val = NULL;
|
||||||
|
else
|
||||||
|
val = retval;
|
||||||
|
runningmutex.Unlock();
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef _WIN32_WCE
|
||||||
|
UINT __stdcall JThread::TheThread(void *param)
|
||||||
|
#else
|
||||||
|
DWORD WINAPI JThread::TheThread(void *param)
|
||||||
|
#endif // _WIN32_WCE
|
||||||
|
{
|
||||||
|
JThread *jthread;
|
||||||
|
void *ret;
|
||||||
|
|
||||||
|
jthread = (JThread *)param;
|
||||||
|
|
||||||
|
jthread->continuemutex2.Lock();
|
||||||
|
jthread->runningmutex.Lock();
|
||||||
|
jthread->running = true;
|
||||||
|
jthread->runningmutex.Unlock();
|
||||||
|
|
||||||
|
jthread->continuemutex.Lock();
|
||||||
|
jthread->continuemutex.Unlock();
|
||||||
|
|
||||||
|
ret = jthread->Thread();
|
||||||
|
|
||||||
|
jthread->runningmutex.Lock();
|
||||||
|
jthread->running = false;
|
||||||
|
jthread->retval = ret;
|
||||||
|
CloseHandle(jthread->threadhandle);
|
||||||
|
jthread->runningmutex.Unlock();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JThread::ThreadStarted()
|
||||||
|
{
|
||||||
|
continuemutex2.Unlock();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user