diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-10-11 18:30:53 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-10-11 18:30:53 +0400 |
commit | 4f33d65ba1f02f2cd3f340d0123900ea1beffd2c (patch) | |
tree | 05ef40081ce6be190a171e0fee09b12344e16eb6 /build_files/cmake | |
parent | 1ab9fc59b750b1dc5ebaacd30c6891949895a10d (diff) | |
parent | 79f21f88c2be305962f6432bf8b1af94056fd92b (diff) |
Cycles: svn merge -r40411:40934 ^/trunk/blender
Diffstat (limited to 'build_files/cmake')
-rw-r--r-- | build_files/cmake/Modules/FindPythonLibsUnix.cmake | 108 | ||||
-rw-r--r-- | build_files/cmake/Modules/FindSamplerate.cmake | 70 | ||||
-rw-r--r-- | build_files/cmake/cmake_static_check_cppcheck.py | 25 | ||||
-rw-r--r-- | build_files/cmake/cmake_static_check_sparse.py | 14 | ||||
-rw-r--r-- | build_files/cmake/cmake_static_check_splint.py | 16 | ||||
-rw-r--r-- | build_files/cmake/config/blender_headless.cmake | 1 | ||||
-rw-r--r-- | build_files/cmake/config/blender_lite.cmake | 1 | ||||
-rw-r--r-- | build_files/cmake/config/bpy_module.cmake | 1 | ||||
-rw-r--r-- | build_files/cmake/macros.cmake | 72 | ||||
-rw-r--r-- | build_files/cmake/project_source_info.py | 46 |
10 files changed, 172 insertions, 182 deletions
diff --git a/build_files/cmake/Modules/FindPythonLibsUnix.cmake b/build_files/cmake/Modules/FindPythonLibsUnix.cmake index 882f1e2ea77..fd5d20920da 100644 --- a/build_files/cmake/Modules/FindPythonLibsUnix.cmake +++ b/build_files/cmake/Modules/FindPythonLibsUnix.cmake @@ -34,67 +34,71 @@ IF(NOT PYTHON_ROOT_DIR AND NOT $ENV{PYTHON_ROOT_DIR} STREQUAL "") SET(PYTHON_ROOT_DIR $ENV{PYTHON_ROOT_DIR}) ENDIF() -IF(DEFINED PYTHON_VERSION) - SET(PYTHON_VERSION "${PYTHON_VERSION}" CACHE STRING "") -ELSE() - SET(PYTHON_VERSION 3.2 CACHE STRING "") -ENDIF() +SET(PYTHON_VERSION 3.2 CACHE STRING "Python Version (major and minor only)") MARK_AS_ADVANCED(PYTHON_VERSION) -SET(PYTHON_LINKFLAGS "-Xlinker -export-dynamic") + +# See: http://docs.python.org/extending/embedding.html#linking-requirements +# for why this is needed +SET(PYTHON_LINKFLAGS "-Xlinker -export-dynamic" CACHE STRING "Linker flags for python") MARK_AS_ADVANCED(PYTHON_LINKFLAGS) -SET(_python_ABI_FLAGS - "m;mu;u; " # release - "md;mud;ud;d" # debug -) - -STRING(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION}) - -SET(_python_SEARCH_DIRS - ${PYTHON_ROOT_DIR} - "$ENV{HOME}/py${_PYTHON_VERSION_NO_DOTS}" - "/opt/py${_PYTHON_VERSION_NO_DOTS}" -) - -FOREACH(_CURRENT_ABI_FLAGS ${_python_ABI_FLAGS}) - #IF(CMAKE_BUILD_TYPE STREQUAL Debug) - # SET(_CURRENT_ABI_FLAGS "d${_CURRENT_ABI_FLAGS}") - #ENDIF() - STRING(REPLACE " " "" _CURRENT_ABI_FLAGS ${_CURRENT_ABI_FLAGS}) - - FIND_PATH(PYTHON_INCLUDE_DIR - NAMES - Python.h - HINTS - ${_python_SEARCH_DIRS} - PATH_SUFFIXES - include/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS} - ) - FIND_LIBRARY(PYTHON_LIBRARY - NAMES - "python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}" - HINTS - ${_python_SEARCH_DIRS} - PATH_SUFFIXES - lib64 lib +# only search for the dirs if we havn't already +IF((NOT DEFINED PYTHON_INCLUDE_DIR) OR (NOT DEFINED PYTHON_LIBRARY)) + + SET(_python_ABI_FLAGS + "m;mu;u; " # release + "md;mud;ud;d" # debug ) - IF(PYTHON_LIBRARY AND PYTHON_INCLUDE_DIR) - break() - ELSE() - # ensure we dont find values from 2 different ABI versions - UNSET(PYTHON_INCLUDE_DIR CACHE) - UNSET(PYTHON_LIBRARY CACHE) - ENDIF() -ENDFOREACH() + STRING(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION}) -UNSET(_CURRENT_ABI_FLAGS) -UNSET(_CURRENT_PATH) + SET(_python_SEARCH_DIRS + ${PYTHON_ROOT_DIR} + "$ENV{HOME}/py${_PYTHON_VERSION_NO_DOTS}" + "/opt/py${_PYTHON_VERSION_NO_DOTS}" + ) -UNSET(_python_ABI_FLAGS) -UNSET(_python_SEARCH_DIRS) + FOREACH(_CURRENT_ABI_FLAGS ${_python_ABI_FLAGS}) + #IF(CMAKE_BUILD_TYPE STREQUAL Debug) + # SET(_CURRENT_ABI_FLAGS "d${_CURRENT_ABI_FLAGS}") + #ENDIF() + STRING(REPLACE " " "" _CURRENT_ABI_FLAGS ${_CURRENT_ABI_FLAGS}) + + FIND_PATH(PYTHON_INCLUDE_DIR + NAMES + Python.h + HINTS + ${_python_SEARCH_DIRS} + PATH_SUFFIXES + include/python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS} + ) + + FIND_LIBRARY(PYTHON_LIBRARY + NAMES + "python${PYTHON_VERSION}${_CURRENT_ABI_FLAGS}" + HINTS + ${_python_SEARCH_DIRS} + PATH_SUFFIXES + lib64 lib + ) + + IF(PYTHON_LIBRARY AND PYTHON_INCLUDE_DIR) + break() + ELSE() + # ensure we dont find values from 2 different ABI versions + UNSET(PYTHON_INCLUDE_DIR CACHE) + UNSET(PYTHON_LIBRARY CACHE) + ENDIF() + ENDFOREACH() + + UNSET(_CURRENT_ABI_FLAGS) + UNSET(_CURRENT_PATH) + + UNSET(_python_ABI_FLAGS) + UNSET(_python_SEARCH_DIRS) +ENDIF() # handle the QUIETLY and REQUIRED arguments and SET PYTHONLIBSUNIX_FOUND to TRUE IF # all listed variables are TRUE diff --git a/build_files/cmake/Modules/FindSamplerate.cmake b/build_files/cmake/Modules/FindSamplerate.cmake deleted file mode 100644 index ea7a0d7a18c..00000000000 --- a/build_files/cmake/Modules/FindSamplerate.cmake +++ /dev/null @@ -1,70 +0,0 @@ -# - Find Samplerate library -# Find the native Samplerate includes and library -# This module defines -# SAMPLERATE_INCLUDE_DIRS, where to find samplerate.h, Set when -# SAMPLERATE_INCLUDE_DIR is found. -# SAMPLERATE_LIBRARIES, libraries to link against to use Samplerate. -# SAMPLERATE_ROOT_DIR, The base directory to search for Samplerate. -# This can also be an environment variable. -# SAMPLERATE_FOUND, If false, do not try to use Samplerate. -# -# also defined, but not for general use are -# SAMPLERATE_LIBRARY, where to find the Samplerate library. - -#============================================================================= -# Copyright 2011 Blender Foundation. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= - -# If SAMPLERATE_ROOT_DIR was defined in the environment, use it. -IF(NOT SAMPLERATE_ROOT_DIR AND NOT $ENV{SAMPLERATE_ROOT_DIR} STREQUAL "") - SET(SAMPLERATE_ROOT_DIR $ENV{SAMPLERATE_ROOT_DIR}) -ENDIF() - -SET(_samplerate_SEARCH_DIRS - ${SAMPLERATE_ROOT_DIR} - /usr/local - /sw # Fink - /opt/local # DarwinPorts - /opt/csw # Blastwave -) - -FIND_PATH(SAMPLERATE_INCLUDE_DIR - NAMES - samplerate.h - HINTS - ${_samplerate_SEARCH_DIRS} - PATH_SUFFIXES - include -) - -FIND_LIBRARY(SAMPLERATE_LIBRARY - NAMES - samplerate - HINTS - ${_samplerate_SEARCH_DIRS} - PATH_SUFFIXES - lib64 lib - ) - -# handle the QUIETLY and REQUIRED arguments and set SAMPLERATE_FOUND to TRUE if -# all listed variables are TRUE -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Samplerate DEFAULT_MSG - SAMPLERATE_LIBRARY SAMPLERATE_INCLUDE_DIR) - -IF(SAMPLERATE_FOUND) - SET(SAMPLERATE_LIBRARIES ${SAMPLERATE_LIBRARY}) - SET(SAMPLERATE_INCLUDE_DIRS ${SAMPLERATE_INCLUDE_DIR}) -ENDIF(SAMPLERATE_FOUND) - -MARK_AS_ADVANCED( - SAMPLERATE_INCLUDE_DIR - SAMPLERATE_LIBRARY -) diff --git a/build_files/cmake/cmake_static_check_cppcheck.py b/build_files/cmake/cmake_static_check_cppcheck.py index f6d46904794..1c8d619a513 100644 --- a/build_files/cmake/cmake_static_check_cppcheck.py +++ b/build_files/cmake/cmake_static_check_cppcheck.py @@ -37,12 +37,13 @@ CHECKER_BIN = "cppcheck" CHECKER_ARGS = [ # not sure why this is needed, but it is. - "-I" + os.path.join(project_source_info.SOURCE_DIR, "extern/glew/include"), + "-I" + os.path.join(project_source_info.SOURCE_DIR, "extern", "glew", "include"), # "--check-config", # when includes are missing # "--enable=all", # if you want sixty hundred pedantic suggestions ] + def main(): source_info = project_source_info.build_info(ignore_prefix_list=CHECKER_IGNORE_PREFIX) @@ -57,19 +58,21 @@ def main(): check_commands.append((c, cmd)) - for i, (c, cmd) in enumerate(check_commands): - percent = 100.0 * (i / (len(check_commands)-1)) + process_functions = [] + + def my_process(i, c, cmd): + percent = 100.0 * (i / (len(check_commands) - 1)) percent_str = "[" + ("%.2f]" % percent).rjust(7) + " %:" - - # if percent < 27.9: - # continue - - # let cppcheck finish the line off... - sys.stdout.write("%s " % percent_str) sys.stdout.flush() - process = subprocess.Popen(cmd) - process.wait() + sys.stdout.write("%s " % percent_str) + + return subprocess.Popen(cmd) + + for i, (c, cmd) in enumerate(check_commands): + process_functions.append((my_process, (i, c, cmd))) + + project_source_info.queue_processes(process_functions) if __name__ == "__main__": diff --git a/build_files/cmake/cmake_static_check_sparse.py b/build_files/cmake/cmake_static_check_sparse.py index 9af53ed8008..aa2d56e5509 100644 --- a/build_files/cmake/cmake_static_check_sparse.py +++ b/build_files/cmake/cmake_static_check_sparse.py @@ -52,15 +52,21 @@ def main(): check_commands.append((c, cmd)) - for i, (c, cmd) in enumerate(check_commands): + def my_process(i, c, cmd): percent = 100.0 * (i / (len(check_commands) - 1)) percent_str = "[" + ("%.2f]" % percent).rjust(7) + " %:" - sys.stdout.write("%s %s\n" % (percent_str, c)) sys.stdout.flush() + sys.stdout.write("%s %s\n" % (percent_str, c)) + + return subprocess.Popen(cmd) + + process_functions = [] + for i, (c, cmd) in enumerate(check_commands): + process_functions.append((my_process, (i, c, cmd))) + + project_source_info.queue_processes(process_functions) - process = subprocess.Popen(cmd) - process.wait() if __name__ == "__main__": main() diff --git a/build_files/cmake/cmake_static_check_splint.py b/build_files/cmake/cmake_static_check_splint.py index 3614ab48cf8..08d83337426 100644 --- a/build_files/cmake/cmake_static_check_splint.py +++ b/build_files/cmake/cmake_static_check_splint.py @@ -58,9 +58,9 @@ CHECKER_ARGS = [ # re-definitions, rna causes most of these "-redef", "-syntax", - + # dummy, witjout this splint complains with: - # /usr/include/bits/confname.h:31:27: *** Internal Bug at cscannerHelp.c:2428: Unexpanded macro not function or constant: int _PC_MAX_CANON + # /usr/include/bits/confname.h:31:27: *** Internal Bug at cscannerHelp.c:2428: Unexpanded macro not function or constant: int _PC_MAX_CANON "-D_PC_MAX_CANON=0", ] @@ -84,15 +84,21 @@ def main(): check_commands.append((c, cmd)) - for i, (c, cmd) in enumerate(check_commands): + def my_process(i, c, cmd): percent = 100.0 * (i / (len(check_commands) - 1)) percent_str = "[" + ("%.2f]" % percent).rjust(7) + " %:" sys.stdout.write("%s %s\n" % (percent_str, c)) sys.stdout.flush() - process = subprocess.Popen(cmd) - process.wait() + return subprocess.Popen(cmd) + + process_functions = [] + for i, (c, cmd) in enumerate(check_commands): + process_functions.append((my_process, (i, c, cmd))) + + project_source_info.queue_processes(process_functions) + if __name__ == "__main__": main() diff --git a/build_files/cmake/config/blender_headless.cmake b/build_files/cmake/config/blender_headless.cmake index bd69eed30dd..c4d64125744 100644 --- a/build_files/cmake/config/blender_headless.cmake +++ b/build_files/cmake/config/blender_headless.cmake @@ -11,7 +11,6 @@ set(WITH_GAMEENGINE OFF CACHE FORCE BOOL) # disable audio, its possible some devs may want this but for now disable # so the python module doesnt hold the audio device and loads quickly. set(WITH_AUDASPACE OFF CACHE FORCE BOOL) -set(WITH_SAMPLERATE OFF CACHE FORCE BOOL) set(WITH_FFTW3 OFF CACHE FORCE BOOL) set(WITH_JACK OFF CACHE FORCE BOOL) set(WITH_SDL OFF CACHE FORCE BOOL) diff --git a/build_files/cmake/config/blender_lite.cmake b/build_files/cmake/config/blender_lite.cmake index f09a8058f14..6791028a888 100644 --- a/build_files/cmake/config/blender_lite.cmake +++ b/build_files/cmake/config/blender_lite.cmake @@ -38,6 +38,5 @@ set(WITH_OPENCOLLADA OFF CACHE FORCE BOOL) set(WITH_OPENMP OFF CACHE FORCE BOOL) set(WITH_PYTHON_INSTALL OFF CACHE FORCE BOOL) set(WITH_RAYOPTIMIZATION OFF CACHE FORCE BOOL) -set(WITH_SAMPLERATE OFF CACHE FORCE BOOL) set(WITH_SDL OFF CACHE FORCE BOOL) set(WITH_X11_XINPUT OFF CACHE FORCE BOOL) diff --git a/build_files/cmake/config/bpy_module.cmake b/build_files/cmake/config/bpy_module.cmake index 5392705f0dc..6279f06214f 100644 --- a/build_files/cmake/config/bpy_module.cmake +++ b/build_files/cmake/config/bpy_module.cmake @@ -18,7 +18,6 @@ set(WITH_GAMEENGINE OFF CACHE FORCE BOOL) # disable audio, its possible some devs may want this but for now disable # so the python module doesnt hold the audio device and loads quickly. set(WITH_AUDASPACE OFF CACHE FORCE BOOL) -set(WITH_SAMPLERATE OFF CACHE FORCE BOOL) set(WITH_FFTW3 OFF CACHE FORCE BOOL) set(WITH_JACK OFF CACHE FORCE BOOL) set(WITH_SDL OFF CACHE FORCE BOOL) diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index 9671bffe2bd..db6c080d98d 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -187,9 +187,6 @@ macro(SETUP_LIBDIRS) if(WITH_CODEC_SNDFILE) link_directories(${SNDFILE_LIBPATH}) endif() - if(WITH_SAMPLERATE) - link_directories(${SAMPLERATE_LIBPATH}) - endif() if(WITH_FFTW3) link_directories(${FFTW3_LIBPATH}) endif() @@ -219,6 +216,7 @@ macro(setup_liblinks ${JPEG_LIBRARIES} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES} + ${FREETYPE_LIBRARY} ${PLATFORM_LINKLIBS}) # since we are using the local libs for python when compiling msvc projects, we need to add _d when compiling debug versions @@ -239,15 +237,8 @@ macro(setup_liblinks target_link_libraries(${target} ${GLEW_LIBRARY}) endif() - target_link_libraries(${target} - ${OPENGL_glu_LIBRARY} - ${JPEG_LIBRARIES} - ${PNG_LIBRARIES} - ${ZLIB_LIBRARIES} - ${FREETYPE_LIBRARY}) - if(WITH_INTERNATIONAL) - target_link_libraries(${target} ${GETTEXT_LIB}) + target_link_libraries(${target} ${GETTEXT_LIBRARIES}) if(WIN32 AND NOT UNIX) target_link_libraries(${target} ${ICONV_LIBRARIES}) @@ -266,9 +257,6 @@ macro(setup_liblinks if(WITH_CODEC_SNDFILE) target_link_libraries(${target} ${SNDFILE_LIBRARIES}) endif() - if(WITH_SAMPLERATE) - target_link_libraries(${target} ${SAMPLERATE_LIBRARIES}) - endif() if(WITH_SDL) target_link_libraries(${target} ${SDL_LIBRARY}) endif() @@ -298,6 +286,11 @@ macro(setup_liblinks target_link_libraries(${target} ${OPENJPEG_LIBRARIES}) endif() if(WITH_CODEC_FFMPEG) + + # Strange!, without this ffmpeg gives linking errors (on linux) + # even though its linked above + target_link_libraries(${target} ${OPENGL_glu_LIBRARY}) + target_link_libraries(${target} ${FFMPEG_LIBRARIES}) endif() if(WITH_OPENCOLLADA) @@ -338,44 +331,59 @@ macro(setup_liblinks endif() endmacro() -macro(TEST_SSE_SUPPORT) +macro(TEST_SSE_SUPPORT + _sse_flags + _sse2_flags) + include(CheckCSourceRuns) # message(STATUS "Detecting SSE support") - if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) - set(CMAKE_REQUIRED_FLAGS "-msse -msse2") + if(CMAKE_COMPILER_IS_GNUCC OR (CMAKE_C_COMPILER_ID MATCHES "Clang")) + set(${_sse_flags} "-msse") + set(${_sse2_flags} "-msse2") elseif(MSVC) - set(CMAKE_REQUIRED_FLAGS "/arch:SSE2") # TODO, SSE 1 ? + set(${_sse_flags} "/arch:SSE") + set(${_sse2_flags} "/arch:SSE2") + elseif(CMAKE_C_COMPILER_ID MATCHES "Intel") + set(${_sse_flags} "") # icc defaults to -msse + set(${_sse2_flags} "-msse2") + else() + message(WARNING "SSE flags for this compiler: '${CMAKE_C_COMPILER_ID}' not known") + set(${_sse_flags}) + set(${_sse2_flags}) endif() - if(NOT DEFINED ${SUPPORT_SSE_BUILD}) + set(CMAKE_REQUIRED_FLAGS "${${_sse_flags}} ${${_sse2_flags}}") + + if(NOT DEFINED SUPPORT_SSE_BUILD) + # result cached check_c_source_runs(" #include <xmmintrin.h> - int main() { __m128 v = _mm_setzero_ps(); return 0; }" + int main(void) { __m128 v = _mm_setzero_ps(); return 0; }" SUPPORT_SSE_BUILD) - + if(SUPPORT_SSE_BUILD) message(STATUS "SSE Support: detected.") else() message(STATUS "SSE Support: missing.") endif() - set(${SUPPORT_SSE_BUILD} ${SUPPORT_SSE_BUILD} CACHE INTERNAL "SSE Test") - endif() + endif() - if(NOT DEFINED ${SUPPORT_SSE2_BUILD}) + if(NOT DEFINED SUPPORT_SSE2_BUILD) + # result cached check_c_source_runs(" #include <emmintrin.h> - int main() { __m128d v = _mm_setzero_pd(); return 0; }" + int main(void) { __m128d v = _mm_setzero_pd(); return 0; }" SUPPORT_SSE2_BUILD) if(SUPPORT_SSE2_BUILD) message(STATUS "SSE2 Support: detected.") else() message(STATUS "SSE2 Support: missing.") - endif() - set(${SUPPORT_SSE2_BUILD} ${SUPPORT_SSE2_BUILD} CACHE INTERNAL "SSE2 Test") + endif() endif() + unset(CMAKE_REQUIRED_FLAGS) endmacro() # when we have warnings as errors applied globally this @@ -494,7 +502,7 @@ macro(get_blender_version) if(${_out_version_char_empty}) set(BLENDER_VERSION_CHAR_INDEX "0") else() - set(_char_ls a b c d e f g h i j k l m n o p q r s t u v w q y z) + set(_char_ls a b c d e f g h i j k l m n o p q r s t u v w x y z) list(FIND _char_ls ${BLENDER_VERSION_CHAR} _out_version_char_index) math(EXPR BLENDER_VERSION_CHAR_INDEX "${_out_version_char_index} + 1") unset(_char_ls) @@ -511,7 +519,7 @@ endmacro() # hacks to override initial project settings -# these macros must be called directly before/after project(Blender) +# these macros must be called directly before/after project(Blender) macro(blender_project_hack_pre) # ---------------- # MINGW HACK START @@ -553,8 +561,10 @@ macro(blender_project_hack_post) # have libs we define and that cmake & scons builds match. set(CMAKE_C_STANDARD_LIBRARIES "" CACHE STRING "" FORCE) set(CMAKE_CXX_STANDARD_LIBRARIES "" CACHE STRING "" FORCE) - mark_as_advanced(CMAKE_C_STANDARD_LIBRARIES) - mark_as_advanced(CMAKE_CXX_STANDARD_LIBRARIES) + mark_as_advanced( + CMAKE_C_STANDARD_LIBRARIES + CMAKE_CXX_STANDARD_LIBRARIES + ) endif() unset(_reset_standard_libraries) diff --git a/build_files/cmake/project_source_info.py b/build_files/cmake/project_source_info.py index c4b83d20ea5..c636d778aaa 100644 --- a/build_files/cmake/project_source_info.py +++ b/build_files/cmake/project_source_info.py @@ -27,7 +27,6 @@ __all__ = ( ) import os -import sys from os.path import join, dirname, normpath, abspath SOURCE_DIR = join(dirname(__file__), "..", "..") @@ -40,11 +39,6 @@ def is_c_header(filename): return (ext in (".h", ".hpp", ".hxx")) -def is_c_header(filename): - ext = os.path.splitext(filename)[1] - return (ext in (".h", ".hpp", ".hxx")) - - def is_c(filename): ext = os.path.splitext(filename)[1] return (ext in (".c", ".cpp", ".cxx", ".m", ".mm", ".rc")) @@ -79,6 +73,7 @@ def do_ignore(filepath, ignore_prefix_list): def makefile_log(): import subprocess + import time # Check blender is not 2.5x until it supports playback again print("running make with --dry-run ...") process = subprocess.Popen(["make", "--always-make", "--dry-run", "--keep-going", "VERBOSE=1"], @@ -153,6 +148,45 @@ def build_info(use_c=True, use_cxx=True, ignore_prefix_list=None): return source +# could be moved elsewhere!, this just happens to be used by scripts that also +# use this module. +def queue_processes(process_funcs, job_total=-1): + """ Takes a list of function arg pairs, each function must return a process + """ + import sys + + if job_total == -1: + import multiprocessing + job_total = multiprocessing.cpu_count() + del multiprocessing + + if job_total == 1: + for func, args in process_funcs: + sys.stdout.flush() + sys.stderr.flush() + + process = func(*args) + process.wait() + else: + import time + + processes = [] + for func, args in process_funcs: + # wait until a thread is free + while 1: + processes[:] = [p for p in processes if p.poll() is None] + + if len(processes) <= job_total: + break + else: + time.sleep(0.1) + + sys.stdout.flush() + sys.stderr.flush() + + processes.append(func(*args)) + + def main(): if not os.path.exists(join(CMAKE_DIR, "CMakeCache.txt")): print("This script must run from the cmake build dir") |