diff --git a/CMakeLists.txt b/CMakeLists.txt index e4f7b31e40acbca17c92e32c65b50859e882e272..205f305a6e895a8b1101a99cf393be5392605c37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,6 +69,9 @@ check_include_file(sys/prctl.h HAVE_PRCTL_H) check_symbol_exists(O_DSYNC fcntl.h HAVE_O_DSYNC) check_symbol_exists(fdatasync unistd.h HAVE_FDATASYNC) +check_symbol_exists(pthread_yield pthread.h HAVE_PTHREAD_YIELD) +check_symbol_exists(sched_yield sched.h HAVE_SCHED_YIELD) + check_function_exists(memmem HAVE_MEMMEM) check_function_exists(memrchr HAVE_MEMRCHR) check_function_exists(sendfile HAVE_SENDFILE) diff --git a/README.MacOSX b/README.MacOSX index 6ec9ba9012053e861107e7a41a83d995f9ffa2d4..8e032ded535d2cc6937376d06b7385cc8b5edaa6 100644 --- a/README.MacOSX +++ b/README.MacOSX @@ -41,6 +41,16 @@ of "Command Line Tools for Xcode". This package contains /usr/bin/clang and 3. Install necessary python modules: pyYAML, python-daemon ------------- +If you use latest Mac OS X version it is recommended using easy_install or pip. +For instance to install these packages via easy_install just type following commands +into terminal: + +sudo easy_install pyyaml +sudo easy_install pydaemon +sudo easy_install daemon + +Otherwise see following instruction + NB: it is recommended to install python modules through setup.py, using the default python (which should be >= 2.6.x and < 3.x); @@ -60,7 +70,7 @@ NOTE: If you want to get DMG package go to section 6. cd tarantool mkdir build && cd build - CC=clang CXX=clang++ cmake .. \ + cmake .. \ -DCMAKE_BUILD_TYPE=RelWithDebugInfo \ -DENABLE_CLIENT=true \ -DDARWIN_BUILD_TYPE=Ports diff --git a/cmake/FindReadline.cmake b/cmake/FindReadline.cmake index 10aad97f7463a5ec89fa55f8f860834e769826e0..24b6e4740e8e9e213006b61d098d96a98d19927f 100644 --- a/cmake/FindReadline.cmake +++ b/cmake/FindReadline.cmake @@ -7,22 +7,35 @@ # include(FindTermcap) -FIND_LIBRARY(READLINE_READLINE_LIBRARY NAMES readline) -FIND_PATH(READLINE_INCLUDE_DIR readline/readline.h) +if (DEFINED READLINE_ROOT) + set(_FIND_OPTS NO_CMAKE NO_CMAKE_SYSTEM_PATH) + FIND_LIBRARY(READLINE_READLINE_LIBRARY + NAMES readline + HINTS ${READLINE_ROOT}/lib + ${_FIND_OPTS}) + FIND_PATH(READLINE_INCLUDE_DIR + NAMES readline/readline.h + HINTS ${READLINE_ROOT}/include + ${_FIND_OPTS}) +else() + FIND_LIBRARY(READLINE_READLINE_LIBRARY NAMES readline) + FIND_PATH(READLINE_INCLUDE_DIR readline/readline.h) +endif() + SET(READLINE_FOUND FALSE) IF (READLINE_READLINE_LIBRARY AND READLINE_INCLUDE_DIR) - SET (READLINE_FOUND TRUE) - SET (READLINE_INCLUDE_DIR ${READLINE_INCLUDE_DIR}) - SET (READLINE_LIBRARIES ${READLINE_READLINE_LIBRARY}) - MESSAGE(STATUS "Found GNU readline: ${READLINE_READLINE_LIBRARY}") - IF (TERMCAP_FOUND) - SET (READLINE_LIBRARIES ${READLINE_LIBRARIES} ${TERMCAP_LIBRARY}) - ENDIF (TERMCAP_FOUND) + SET (READLINE_FOUND TRUE) + SET (READLINE_INCLUDE_DIR ${READLINE_INCLUDE_DIR}) + SET (READLINE_LIBRARIES ${READLINE_READLINE_LIBRARY}) + MESSAGE(STATUS "Found GNU readline: ${READLINE_READLINE_LIBRARY}, include dir ${READLINE_INCLUDE_DIR}") + IF (TERMCAP_FOUND) + SET (READLINE_LIBRARIES ${READLINE_LIBRARIES} ${TERMCAP_LIBRARY}) + ENDIF (TERMCAP_FOUND) ENDIF (READLINE_READLINE_LIBRARY AND READLINE_INCLUDE_DIR) MARK_AS_ADVANCED( - READLINE_FOUND - READLINE_INCLUDE_DIR - READLINE_LIBRARIES - ) + READLINE_FOUND + READLINE_INCLUDE_DIR + READLINE_LIBRARIES + ) diff --git a/src/lib/small/quota.h b/src/lib/small/quota.h index 260578e7def3e31d34c46f04a6b8a03f6c6d4bad..70ceb8407f90f6c7710002de7406d3910e1d459b 100644 --- a/src/lib/small/quota.h +++ b/src/lib/small/quota.h @@ -32,6 +32,7 @@ #include <stdlib.h> #include <stdint.h> #include <assert.h> +#include <unistd.h> #if defined(__cplusplus) extern "C" { diff --git a/src/tarantool.cc b/src/tarantool.cc index 2b8b557fede19c5d765cc6841f268de307c1e21d..35ea9350497a6cc4c752e664cbeb2ac5cc0d6d20 100644 --- a/src/tarantool.cc +++ b/src/tarantool.cc @@ -543,10 +543,11 @@ main(int argc, char **argv) __libc_stack_end = (void*) &argv; #endif start_time = ev_time(); +#ifndef __APPLE__ /* set locale to make iswXXXX function work */ if (setlocale(LC_CTYPE, "C.UTF-8") == NULL) fprintf(stderr, "Failed to set locale to C.UTF-8\n"); - +#endif if (argc > 1 && access(argv[1], R_OK) != 0) { if (argc == 2 && argv[1][0] != '-') { /* diff --git a/src/trivia/config.h.cmake b/src/trivia/config.h.cmake index e04b7cb4b66c48c495d5fcf65bd6bf607a186895..7c807728366f4f54f304d713f9334d1f2b216011 100644 --- a/src/trivia/config.h.cmake +++ b/src/trivia/config.h.cmake @@ -127,6 +127,8 @@ #cmakedefine ENABLE_BUNDLED_LIBEIO 1 #cmakedefine ENABLE_BUNDLED_LIBCORO 1 +#cmakedefine HAVE_PTHREAD_YIELD 1 +#cmakedefine HAVE_SCHED_YIELD 1 #cmakedefine HAVE_PRCTL_H 1 diff --git a/test/unit/quota.cc b/test/unit/quota.cc index 0f66a391bf08d43e8a4ddbc59c1dfaf4158be4fa..79b49e4eec015210eb0dc50c688e21077ba3e9b2 100644 --- a/test/unit/quota.cc +++ b/test/unit/quota.cc @@ -1,6 +1,8 @@ #include "small/quota.h" #include <pthread.h> +#include <sched.h> + #include "test.h" struct quota quota; @@ -32,7 +34,7 @@ void *thread_routine(void *vparam) } ssize_t max = rand() % QUOTA_MAX; max = quota_set("a, max); - pthread_yield(); + sched_yield(); if (max > 0) { data->last_lim_set = max; data->lim_change_success++; @@ -42,7 +44,7 @@ void *thread_routine(void *vparam) allocated_size = -1; data->use_change = 0; data->use_change_success++; - pthread_yield(); + sched_yield(); } else { allocated_size = rand() % max + 1; allocated_size = quota_use("a, allocated_size); @@ -50,7 +52,7 @@ void *thread_routine(void *vparam) data->use_change = allocated_size; data->use_change_success++; } - pthread_yield(); + sched_yield(); } } return (void *)check_fail_count;