X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2bafc9e47b08a780d3e0d57580404cfda3f17095..47a6b2b4bbfa3f2acb62c6a0a48569f3b5194f15:/buildtools/Cmake/CompleteInFiles.cmake diff --git a/buildtools/Cmake/CompleteInFiles.cmake b/buildtools/Cmake/CompleteInFiles.cmake index ad724e068c..4e916724e1 100644 --- a/buildtools/Cmake/CompleteInFiles.cmake +++ b/buildtools/Cmake/CompleteInFiles.cmake @@ -1,16 +1,18 @@ +set(CMAKE_MODULE_PATH +${CMAKE_MODULE_PATH} +${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Modules +) include(CheckFunctionExists) include(CheckIncludeFile) include(CheckIncludeFiles) include(CheckLibraryExists) include(TestBigEndian) - +if(enable_graphviz) +include(FindGraphviz) +endif(enable_graphviz) TEST_BIG_ENDIAN(BIGENDIAN) # Checks for header libraries functions. - -find_library(HAVE_CGRAPH_LIB cgraph) -find_file(HAVE_CGRAPH_H graphviz/cgraph.h) - CHECK_LIBRARY_EXISTS(pthread pthread_create NO_DEFAULT_PATHS pthread) CHECK_LIBRARY_EXISTS(pthread sem_init NO_DEFAULT_PATHS HAVE_SEM_INIT_LIB) CHECK_LIBRARY_EXISTS(pthread sem_timedwait NO_DEFAULT_PATHS HAVE_SEM_TIMEDWAIT_LIB) @@ -79,6 +81,7 @@ if(enable_latency_bound_tracking) SET(HAVE_LATENCY_BOUND_TRACKING 1) else(enable_latency_bound_tracking) if(enable_gtnets) + message("turning latency_bound_tracking to ON because GTNeTs is ON") SET(enable_latency_bound_tracking ON) SET(HAVE_LATENCY_BOUND_TRACKING 1) else(enable_gtnets) @@ -95,19 +98,11 @@ else(enable_model-checking AND HAVE_MMAP) endif(enable_model-checking AND HAVE_MMAP) if(enable_lua) - include(FindLua51) + include(FindLua51Simgrid) if(LUA51_FOUND) set(HAVE_LUA 1) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-I${LUA_INCLUDE_DIR} ") - foreach(path_lua ${LUA_LIBRARIES}) - string(REGEX REPLACE "liblua.*" "" path_lua_to_use ${path_lua}) - string(REGEX MATCH ".*lua.*" operation "${path_lua}") - if(operation) - string(REGEX REPLACE "${path_lua_to_use}" "" liblua ${path_lua}) - string(REPLACE "lib" "" liblua "${liblua}") - string(REGEX REPLACE "[.][^.]*$" "" liblua "${liblua}") - endif(operation) - endforeach(path_lua ${LUA_LIBRARIES}) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-L${LUA_LIBRARY_DIR} ") else(LUA51_FOUND) message("Lua binding need version 5.1 and cmake version 2.8") message("Cmake version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}") @@ -145,6 +140,23 @@ if(enable_ruby) endif(enable_ruby) +#-------------------------------------------------------------------------------------------------- +### Initialize of Smpi + +if(enable_smpi) + include(FindF2c) + if(HAVE_F2C_H) + string(REGEX MATCH "-I${HAVE_F2C_H} " operation "${CMAKE_C_FLAGS}") + if(NOT operation) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-I${HAVE_F2C_H} ") + endif(NOT operation) + else(HAVE_F2C_H) + message("-- Smpi Need \"f2c.h\".") + message("-- Please install f2c before use smpi or set LD_LIBRARY_PATH to \"f2c.h\".") + message(FATAL_ERROR "SMPI DEPENDENCIES") + endif(HAVE_F2C_H) +endif(enable_smpi) + #-------------------------------------------------------------------------------------------------- ### Initialize of CONTEXT JAVA @@ -188,37 +200,81 @@ endif(NOT enable_gtnets OR enable_supernovae) #-------------------------------------------------------------------------------------------------- ### Initialize of cgraph -mark_as_advanced(HAVE_CGRAPH_LIB) -mark_as_advanced(HAVE_CGRAPH_H) - -if(HAVE_CGRAPH_LIB AND HAVE_CGRAPH_H) - string(REGEX REPLACE "/libcgraph.*" "" lib_cgraph ${HAVE_CGRAPH_LIB}) - string(REPLACE "/cgraph.h" "" file_cgraph_h ${HAVE_CGRAPH_H}) - string(REGEX MATCH "-I${file_cgraph_h} " operation "${CMAKE_C_FLAGS}") - if(NOT operation) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-I${file_cgraph_h} ") - endif(NOT operation) - string(REGEX MATCH "-L${lib_cgraph} " operation "${CMAKE_C_FLAGS}") - if(NOT operation) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-L${lib_cgraph} ") - endif(NOT operation) - -endif(HAVE_CGRAPH_LIB AND HAVE_CGRAPH_H) +if(enable_graphviz AND HAVE_CDT_LIB) +if(HAVE_CGRAPH_LIB OR HAVE_AGRAPH_LIB) + + if(HAVE_AGRAPH_LIB) + string(REGEX REPLACE "/libagraph.*" "" lib_graphviz ${HAVE_AGRAPH_LIB}) + else(HAVE_AGRAPH_LIB) + if(HAVE_CGRAPH_LIB) + string(REGEX REPLACE "/libcgraph.*" "" lib_graphviz ${HAVE_CGRAPH_LIB}) + endif(HAVE_CGRAPH_LIB) + endif(HAVE_AGRAPH_LIB) + + if(HAVE_GRAPH_H OR HAVE_AGRAPH_H OR HAVE_CGRAPH_H) + + if(HAVE_GRAPH_H) + string(REPLACE "/graphviz/graph.h" "" file_graphviz_h ${HAVE_GRAPH_H}) + string(REPLACE "/graphviz" "" file_graphviz_h ${file_graphviz_h}) + set(GRAPH_H 1) + endif(HAVE_GRAPH_H) + + if(HAVE_AGRAPH_H) + string(REPLACE "/graphviz/agraph.h" "" file_graphviz_h ${HAVE_AGRAPH_H}) + string(REPLACE "/graphviz" "" file_graphviz_h ${file_graphviz_h}) + set(AGRAPH_H 1) + endif(HAVE_AGRAPH_H) + + if(HAVE_CGRAPH_H) + string(REPLACE "/graphviz/cgraph.h" "" file_graphviz_h ${HAVE_CGRAPH_H}) + string(REPLACE "/graphviz" "" file_graphviz_h ${file_graphviz_h}) + set(CGRAPH_H 1) + endif(HAVE_CGRAPH_H) + + string(REGEX MATCH "-I${file_graphviz_h} " operation "${CMAKE_C_FLAGS}") + if(NOT operation) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-I${file_graphviz_h} ") + endif(NOT operation) + + string(REGEX MATCH "-I${file_graphviz_h}/graphviz " operation "${CMAKE_C_FLAGS}") + if(NOT operation) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-I${file_graphviz_h}/graphviz ") + endif(NOT operation) + + string(REGEX MATCH "-L${lib_graphviz} " operation "${CMAKE_C_FLAGS}") + if(NOT operation) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-L${lib_graphviz} ") + endif(NOT operation) + + else(HAVE_GRAPH_H OR HAVE_AGRAPH_H OR HAVE_CGRAPH_H) + set(enable_graphviz "0") + endif(HAVE_GRAPH_H OR HAVE_AGRAPH_H OR HAVE_CGRAPH_H) + +else(HAVE_CGRAPH_LIB OR HAVE_AGRAPH_LIB) + set(enable_graphviz "0") +endif(HAVE_CGRAPH_LIB OR HAVE_AGRAPH_LIB) +endif(enable_graphviz AND HAVE_CDT_LIB) #-------------------------------------------------------------------------------------------------- ### Initialize of pcre -find_library(PATH_PCRE_LIB pcre "/usr/lib/") +find_library(PATH_PCRE_LIB pcre) +find_file(PATH_PCRE_H "pcre.h") set(HAVE_PCRE_LIB 0) -if(PATH_PCRE_LIB) +if(PATH_PCRE_LIB AND PATH_PCRE_H) string(REGEX REPLACE "/libpcre.*[.]${LIB_EXE}$" "" PATHLIBPCRE "${PATH_PCRE_LIB}") - string(REGEX MATCH "-L${PATHLIBPCRE} " operation "${CMAKE_C_FLAGS}") - if(NOT operation) + string(REGEX REPLACE "/pcre.h" "" PATH_PCRE_H "${PATH_PCRE_H}") + string(REGEX MATCH "-L${PATHLIBPCRE} " operation "${CMAKE_C_FLAGS}") + if(NOT operation) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-L${PATHLIBPCRE} ") - endif(NOT operation) + endif(NOT operation) + string(REGEX MATCH "-I${PATH_PCRE_H} " operation "${CMAKE_C_FLAGS}") + if(NOT operation) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}-I${PATH_PCRE_H} ") + endif(NOT operation) set(HAVE_PCRE_LIB 1) else(PATH_PCRE_LIB) message("You should install libpcre (please install the libpcre3-dev package or equivalent)") -endif(PATH_PCRE_LIB) +endif(PATH_PCRE_LIB AND PATH_PCRE_H) #-------------------------------------------------------------------------------------------------- ### Initialize of CONTEXT THREADS @@ -279,24 +335,31 @@ if(WIN32) endif(__GNUC__) endif(WIN32) -try_run(RUN_mcsc_VAR COMPILE_mcsc_VAR - ${PROJECT_DIRECTORY} - ${PROJECT_DIRECTORY}/buildtools/Cmake/test_prog/prog_AC_CHECK_MCSC.c - COMPILE_DEFINITIONS "${mcsc_flags}" - OUTPUT_VARIABLE var_compil - ) - -if(EXISTS "${simgrid_BINARY_DIR}/conftestval" AND COMPILE_mcsc_VAR) - file(READ "${simgrid_BINARY_DIR}/conftestval" mcsc) - STRING(REPLACE "\n" "" mcsc "${mcsc}") - if(mcsc) - set(mcsc "yes") - elseif(mcsc) - set(mcsc "no") - endif(mcsc) -else(EXISTS "${simgrid_BINARY_DIR}/conftestval" AND COMPILE_mcsc_VAR) - set(mcsc "no") -endif(EXISTS "${simgrid_BINARY_DIR}/conftestval" AND COMPILE_mcsc_VAR) +IF(CMAKE_CROSSCOMPILING) + IF(WIN32) + set(windows_context "yes") + set(IS_WINDOWS 1) + ENDIF(WIN32) +ELSE(CMAKE_CROSSCOMPILING) + try_run(RUN_mcsc_VAR COMPILE_mcsc_VAR + ${simgrid_BINARY_DIR} + ${PROJECT_DIRECTORY}/buildtools/Cmake/test_prog/prog_AC_CHECK_MCSC.c + COMPILE_DEFINITIONS "${mcsc_flags}" + OUTPUT_VARIABLE var_compil + ) + + if(EXISTS "${simgrid_BINARY_DIR}/conftestval" AND COMPILE_mcsc_VAR) + file(READ "${simgrid_BINARY_DIR}/conftestval" mcsc) + STRING(REPLACE "\n" "" mcsc "${mcsc}") + if(mcsc) + set(mcsc "yes") + elseif(mcsc) + set(mcsc "no") + endif(mcsc) + else(EXISTS "${simgrid_BINARY_DIR}/conftestval" AND COMPILE_mcsc_VAR) + set(mcsc "no") + endif(EXISTS "${simgrid_BINARY_DIR}/conftestval" AND COMPILE_mcsc_VAR) +ENDIF(CMAKE_CROSSCOMPILING) if(mcsc MATCHES "no" AND pthread) if(HAVE_WINDOWS_H) @@ -394,18 +457,19 @@ endif(IS_DIRECTORY ${PROJECT_DIRECTORY}/.git) ## SimGrid and GRAS specific checks ## +IF(NOT CMAKE_CROSSCOMPILING) # Check architecture signature begin try_run(RUN_GRAS_VAR COMPILE_GRAS_VAR - ${PROJECT_DIRECTORY} + ${simgrid_BINARY_DIR} ${PROJECT_DIRECTORY}/buildtools/Cmake/test_prog/prog_GRAS_ARCH.c RUN_OUTPUT_VARIABLE var1 ) if(BIGENDIAN) -set(val_big "B${var1}") -set(GRAS_BIGENDIAN 1) + set(val_big "B${var1}") + set(GRAS_BIGENDIAN 1) else(BIGENDIAN) -set(val_big "l${var1}") -set(GRAS_BIGENDIAN 0) + set(val_big "l${var1}") + set(GRAS_BIGENDIAN 0) endif(BIGENDIAN) if(val_big MATCHES "l_C:1/1:_I:2/1:4/1:4/1:8/1:_P:4/1:4/1:_D:4/1:8/1:") @@ -468,7 +532,7 @@ endif(val_big MATCHES "B_C:1/1:_I:2/2:4/4:8/8:8/8:_P:8/8:8/8:_D:4/4:8/4:") # Check architecture signature end try_run(RUN_GRAS_VAR COMPILE_GRAS_VAR - ${PROJECT_DIRECTORY} + ${simgrid_BINARY_DIR} ${PROJECT_DIRECTORY}/buildtools/Cmake/test_prog/prog_GRAS_CHECK_STRUCT_COMPACTION.c RUN_OUTPUT_VARIABLE var2 ) @@ -479,11 +543,12 @@ endforeach(var_tmp ${var2}) # Check for [SIZEOF_MAX] try_run(RUN_SM_VAR COMPILE_SM_VAR - ${PROJECT_DIRECTORY} + ${simgrid_BINARY_DIR} ${PROJECT_DIRECTORY}/buildtools/Cmake/test_prog/prog_max_size.c RUN_OUTPUT_VARIABLE var3 ) SET(SIZEOF_MAX ${var3}) +ENDIF(NOT CMAKE_CROSSCOMPILING) #-------------------------------------------------------------------------------------------------- @@ -501,12 +566,11 @@ if(HAVE_MAKECONTEXT OR WIN32) endif(__VISUALC__) if(__GNUC__) set(makecontext_CPPFLAGS "-DTEST_makecontext") - set(makecontext_CPPFLAGS_2 "-D_XBT_WIN32 -I${PROJECT_DIRECTORY}/include/xbt -I${PROJECT_DIRECTORY}/src/xbt") + set(makecontext_CPPFLAGS_2 "-D_XBT_WIN32 -I${PROJECT_DIRECTORY}/include/xbt -I${PROJECT_DIRECTORY}/src/xbt") endif(__GNUC__) - endif(WIN32) - + else(WIN32) try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR - ${PROJECT_DIRECTORY} + ${simgrid_BINARY_DIR} ${PROJECT_DIRECTORY}/buildtools/Cmake/test_prog/prog_stacksetup.c COMPILE_DEFINITIONS "${makecontext_CPPFLAGS} ${makecontext_CPPFLAGS_2}" ) @@ -518,14 +582,15 @@ if(HAVE_MAKECONTEXT OR WIN32) string(REPLACE "," "" makecontext_size "${MAKECONTEXT_SIZE}") set(pth_skaddr_makecontext "#define pth_skaddr_makecontext(skaddr,sksize) (${makecontext_addr})") set(pth_sksize_makecontext "#define pth_sksize_makecontext(skaddr,sksize) (${makecontext_size})") + endif(WIN32) endif(HAVE_MAKECONTEXT OR WIN32) #-------------------------------------------------------------------------------------------------- ### check for stackgrowth - +if (NOT CMAKE_CROSSCOMPILING) try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR - ${PROJECT_DIRECTORY} + ${simgrid_BINARY_DIR} ${PROJECT_DIRECTORY}/buildtools/Cmake/test_prog/prog_stackgrowth.c ) file(READ "${simgrid_BINARY_DIR}/conftestval" stack) @@ -536,6 +601,7 @@ if(stack MATCHES "up") set(PTH_STACKGROWTH "1") endif(stack MATCHES "up") +endif(NOT CMAKE_CROSSCOMPILING) ############### ## System checks ## @@ -549,7 +615,7 @@ endif(stack MATCHES "up") #AC_PRINTF_NULL try_run(RUN_PRINTF_NULL_VAR COMPILE_PRINTF_NULL_VAR - ${PROJECT_DIRECTORY} + ${simgrid_BINARY_DIR} ${PROJECT_DIRECTORY}/buildtools/Cmake/test_prog/prog_printf_null.c ) @@ -602,7 +668,7 @@ foreach(fct ${diff_va}) }" ) try_compile(COMPILE_VA_NULL_VAR - ${PROJECT_DIRECTORY} + ${simgrid_BINARY_DIR} ${PROJECT_DIRECTORY}/buildtools/Cmake/test_prog/prog_va_copy.c ) if(COMPILE_VA_NULL_VAR) @@ -660,7 +726,7 @@ endforeach(fct ${diff_va}) #-------------------------------------------------------------------------------------------------- ### check for getline try_compile(COMPILE_RESULT_VAR - ${PROJECT_DIRECTORY} + ${simgrid_BINARY_DIR} ${PROJECT_DIRECTORY}/buildtools/Cmake/test_prog/prog_getline.c ) @@ -679,21 +745,26 @@ if(HAVE_SNPRINTF AND HAVE_VSNPRINTF OR WIN32) #set(HAVE_VSNPRINTF 1) endif(WIN32) - try_run(RUN_SNPRINTF_FUNC_VAR COMPILE_SNPRINTF_FUNC_VAR - ${PROJECT_DIRECTORY} - ${PROJECT_DIRECTORY}/buildtools/Cmake/test_prog/prog_snprintf.c - ) if(CMAKE_CROSSCOMPILING) - set(RUN_SNPRINTF_FUNC "cross") + set(RUN_SNPRINTF_FUNC "cross") + #set(PREFER_PORTABLE_SNPRINTF 1) + else(CMAKE_CROSSCOMPILING) + try_run(RUN_SNPRINTF_FUNC_VAR COMPILE_SNPRINTF_FUNC_VAR + ${simgrid_BINARY_DIR} + ${PROJECT_DIRECTORY}/buildtools/Cmake/test_prog/prog_snprintf.c + ) endif(CMAKE_CROSSCOMPILING) - try_run(RUN_VSNPRINTF_FUNC_VAR COMPILE_VSNPRINTF_FUNC_VAR - ${PROJECT_DIRECTORY} - ${PROJECT_DIRECTORY}/buildtools/Cmake/test_prog/prog_vsnprintf.c - ) if(CMAKE_CROSSCOMPILING) set(RUN_VSNPRINTF_FUNC "cross") + set(PREFER_PORTABLE_VSNPRINTF 1) + else(CMAKE_CROSSCOMPILING) + try_run(RUN_VSNPRINTF_FUNC_VAR COMPILE_VSNPRINTF_FUNC_VAR + ${simgrid_BINARY_DIR} + ${PROJECT_DIRECTORY}/buildtools/Cmake/test_prog/prog_vsnprintf.c + ) endif(CMAKE_CROSSCOMPILING) + set(PREFER_PORTABLE_SNPRINTF 0) if(RUN_VSNPRINTF_FUNC_VAR MATCHES "FAILED_TO_RUN") set(PREFER_PORTABLE_SNPRINTF 1) @@ -729,14 +800,12 @@ endif(ADDR2LINE) ### File to create -configure_file("${PROJECT_DIRECTORY}/src/context_sysv_config.h.in" "${PROJECT_DIRECTORY}/src/context_sysv_config.h" @ONLY IMMEDIATE) +configure_file("${PROJECT_DIRECTORY}/src/context_sysv_config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/src/context_sysv_config.h" @ONLY IMMEDIATE) SET( CMAKEDEFINE "#cmakedefine" ) -configure_file("${PROJECT_DIRECTORY}/buildtools/Cmake/gras_config.h.in" "${PROJECT_DIRECTORY}/src/gras_config.h" @ONLY IMMEDIATE) -configure_file("${PROJECT_DIRECTORY}/src/gras_config.h" "${PROJECT_DIRECTORY}/src/gras_config.h" @ONLY IMMEDIATE) -configure_file("${PROJECT_DIRECTORY}/include/simgrid_config.h.in" "${PROJECT_DIRECTORY}/include/simgrid_config.h" @ONLY IMMEDIATE) -#configure_file("${PROJECT_DIRECTORY}/buildtools/Cmake/tracing_config.h.in" "${PROJECT_DIRECTORY}/include/instr/tracing_config.h" @ONLY IMMEDIATE) -#configure_file("${PROJECT_DIRECTORY}/include/instr/tracing_config.h" "${PROJECT_DIRECTORY}/include/instr/tracing_config.h" @ONLY IMMEDIATE) +configure_file("${PROJECT_DIRECTORY}/buildtools/Cmake/gras_config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/src/gras_config.h" @ONLY IMMEDIATE) +configure_file("${CMAKE_CURRENT_BINARY_DIR}/src/gras_config.h" "${CMAKE_CURRENT_BINARY_DIR}/src/gras_config.h" @ONLY IMMEDIATE) +configure_file("${PROJECT_DIRECTORY}/include/simgrid_config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/include/simgrid_config.h" @ONLY IMMEDIATE) set(top_srcdir "${PROJECT_DIRECTORY}") set(srcdir "${PROJECT_DIRECTORY}/src") @@ -749,10 +818,14 @@ set(CMAKE_LINKARGS "${CMAKE_CURRENT_BINARY_DIR}/lib") set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}/lib:${gtnets_path}/lib:$LD_LIBRARY_PATH") configure_file(${PROJECT_DIRECTORY}/src/smpi/smpicc.in ${CMAKE_CURRENT_BINARY_DIR}/bin/smpicc @ONLY) +configure_file(${PROJECT_DIRECTORY}/src/smpi/smpif2c.in ${CMAKE_CURRENT_BINARY_DIR}/bin/smpif2c @ONLY) +configure_file(${PROJECT_DIRECTORY}/src/smpi/smpiff.in ${CMAKE_CURRENT_BINARY_DIR}/bin/smpiff @ONLY) configure_file(${PROJECT_DIRECTORY}/src/smpi/smpirun.in ${CMAKE_CURRENT_BINARY_DIR}/bin/smpirun @ONLY) configure_file(${PROJECT_DIRECTORY}/examples/smpi/hostfile ${CMAKE_CURRENT_BINARY_DIR}/examples/smpi/hostfile COPYONLY) configure_file(${PROJECT_DIRECTORY}/examples/msg/small_platform.xml ${CMAKE_CURRENT_BINARY_DIR}/examples/msg/small_platform.xml COPYONLY) configure_file(${PROJECT_DIRECTORY}/examples/msg/small_platform_with_routers.xml ${CMAKE_CURRENT_BINARY_DIR}/examples/msg/small_platform_with_routers.xml COPYONLY) exec_program("chmod a=rwx ${CMAKE_CURRENT_BINARY_DIR}/bin/smpicc" OUTPUT_VARIABLE OKITOKI) +exec_program("chmod a=rwx ${CMAKE_CURRENT_BINARY_DIR}/bin/smpif2c" OUTPUT_VARIABLE OKITOKI) +exec_program("chmod a=rwx ${CMAKE_CURRENT_BINARY_DIR}/bin/smpiff" OUTPUT_VARIABLE OKITOKI) exec_program("chmod a=rwx ${CMAKE_CURRENT_BINARY_DIR}/bin/smpirun" OUTPUT_VARIABLE OKITOKI)