mirror of https://github.com/H-uru/korman.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
3.7 KiB
93 lines
3.7 KiB
# This file is part of Korman. |
|
# |
|
# Korman is free software: you can redistribute it and/or modify |
|
# it under the terms of the GNU General Public License as published by |
|
# the Free Software Foundation, either version 3 of the License, or |
|
# (at your option) any later version. |
|
# |
|
# Korman is distributed in the hope that it will be useful, |
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
# GNU General Public License for more details. |
|
# |
|
# You should have received a copy of the GNU General Public License |
|
# along with Korman. If not, see <http://www.gnu.org/licenses/>. |
|
|
|
# The parens in this env variable give CMake heartburn, so we whisper sweet nothings. |
|
set(_PROGRAMFILES_X86 "PROGRAMFILES(X86)") |
|
set(_PROGRAMFILES_X86 "$ENV{${_PROGRAMFILES_X86}}") |
|
|
|
find_program(Blender_EXECUTABLE |
|
NAMES blender |
|
PATHS |
|
"${Blender_ROOT}" |
|
"$ENV{PROGRAMFILES}/Blender Foundation/Blender" |
|
"${_PROGRAMFILES_X86}/Blender Foundation/Blender" |
|
) |
|
|
|
# Hacky? On Windows, we want to make sure that the Blender EXE matches sizeof void* |
|
# Yes, this has bitten me. If it bites you, the result will be "Import Error: PyHSPlasma is not a |
|
# valid Win32 application." That's hardly useful... |
|
if(WIN32 AND EXISTS "${Blender_EXECUTABLE}") |
|
find_package(dumpbin) |
|
if(dumpbin_FOUND) |
|
execute_process( |
|
COMMAND "${dumpbin_EXECUTABLE}" /headers "${Blender_EXECUTABLE}" |
|
RESULTS_VARIABLE _RETURNCODE |
|
OUTPUT_VARIABLE _dumpbin_output |
|
ERROR_VARIABLE _dumpbin_output |
|
OUTPUT_STRIP_TRAILING_WHITESPACE |
|
ERROR_STRIP_TRAILING_WHITESPACE |
|
) |
|
if(_RETURNCODE EQUAL 0) |
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8) |
|
set(_expected_arch "machine \\(x64\\)") |
|
else() |
|
set(_expected_arch "machine \\(x86\\)") |
|
endif() |
|
if(NOT "${_dumpbin_output}" MATCHES "${_expected_arch}") |
|
unset(Blender_EXECUTABLE CACHE) |
|
endif() |
|
else() |
|
message(WARNING "dumpbin failed ${_dumpbin_error}") |
|
endif() |
|
else() |
|
message(WARNING "dumpbin not found, not verifying blender executable") |
|
endif() |
|
endif() |
|
|
|
if(EXISTS "${Blender_EXECUTABLE}") |
|
execute_process( |
|
COMMAND "${Blender_EXECUTABLE}" -b -v |
|
RESULTS_VARIABLE _RETURNCODE |
|
OUTPUT_VARIABLE _Blender_VERSION_OUTPUT |
|
ERROR_VARIABLE _Blender_VERSION_OUTPUT |
|
OUTPUT_STRIP_TRAILING_WHITESPACE |
|
ERROR_STRIP_TRAILING_WHITESPACE |
|
) |
|
# Starting Blender is noisy on stdout, so all the extra characters will make sure things go right. |
|
# https://youtu.be/SlQFIsQ0dbs?t=19 |
|
set(_Blender_PYTHON_EXPR |
|
"import sys; print('!!! OOGABOOGA {}.{} AGOOBAGOO !!!'.format(sys.version_info[0], sys.version_info[1]))" |
|
) |
|
execute_process( |
|
COMMAND "${Blender_EXECUTABLE}" -b --python-expr "${_Blender_PYTHON_EXPR}" |
|
RESULTS_VARIABLE _RETURNCODE |
|
OUTPUT_VARIABLE _Blender_PYTHON_OUTPUT |
|
ERROR_VARIABLE _Blender_PYTHON_OUTPUT |
|
OUTPUT_STRIP_TRAILING_WHITESPACE |
|
ERROR_STRIP_TRAILING_WHITESPACE |
|
) |
|
string(REGEX MATCH [[Blender ([0-9]+\.[0-9]+)]] _match "${_Blender_VERSION_OUTPUT}") |
|
set(Blender_VERSION "${CMAKE_MATCH_1}") |
|
string(REGEX MATCH [[!!! OOGABOOGA ([0-9]+\.[0-9]+) AGOOBAGOO !!!]] _match "${_Blender_PYTHON_OUTPUT}") |
|
set(Blender_PYTHON_VERSION "${CMAKE_MATCH_1}") |
|
endif() |
|
|
|
mark_as_advanced(Blender_EXECUTABLE) |
|
|
|
include(FindPackageHandleStandardArgs) |
|
find_package_handle_standard_args(Blender |
|
REQUIRED_VARS Blender_EXECUTABLE Blender_VERSION Blender_PYTHON_VERSION |
|
VERSION_VAR Blender_VERSION |
|
)
|
|
|