diff --git a/CMakeLists.txt b/CMakeLists.txt index 602616ca286..6fc454a639c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -198,6 +198,7 @@ option(WITH_OPENIMAGEDENOISE "Enable the OpenImageDenoise compositing node" ON option(WITH_OPENSUBDIV "Enable OpenSubdiv for surface subdivision" ON) +option(WITH_POTRACE "Enable features relying on potrace" OFF) option(WITH_OPENVDB "Enable features relying on OpenVDB" ON) option(WITH_OPENVDB_BLOSC "Enable blosc compression for OpenVDB, only enable if OpenVDB was built with blosc support" ON) option(WITH_OPENVDB_3_ABI_COMPATIBLE "Assume OpenVDB library has been compiled with version 3 ABI compatibility" OFF) diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt index d521abc418f..f49c6ea238f 100644 --- a/build_files/build_environment/CMakeLists.txt +++ b/build_files/build_environment/CMakeLists.txt @@ -88,6 +88,7 @@ include(cmake/python_site_packages.cmake) include(cmake/package_python.cmake) include(cmake/numpy.cmake) include(cmake/usd.cmake) +include(cmake/potrace.cmake) # Boost needs to be included after python.cmake due to the PYTHON_BINARY variable being needed. include(cmake/boost.cmake) if(UNIX) diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake index dbb3a33e705..93e17f33284 100644 --- a/build_files/build_environment/cmake/harvest.cmake +++ b/build_files/build_environment/cmake/harvest.cmake @@ -177,6 +177,8 @@ harvest(xvidcore/lib ffmpeg/lib "*.a") harvest(usd/include usd/include "*.h") harvest(usd/lib/usd usd/lib/usd "*") harvest(usd/plugin usd/plugin "*") +harvest(potrace/include potrace/include "*.h") +harvest(potrace/lib potrace/lib "*.a") if(UNIX AND NOT APPLE) harvest(libglu/lib mesa/lib "*.so*") diff --git a/build_files/build_environment/cmake/potrace.cmake b/build_files/build_environment/cmake/potrace.cmake new file mode 100644 index 00000000000..28e57c8c54a --- /dev/null +++ b/build_files/build_environment/cmake/potrace.cmake @@ -0,0 +1,38 @@ +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# This program 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 2 +# of the License, or (at your option) any later version. +# +# This program 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 this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ***** END GPL LICENSE BLOCK ***** + +set(POTRACE_EXTRA_ARGS +) + +if((WIN32 AND BUILD_MODE STREQUAL Release) OR UNIX) + ExternalProject_Add(external_potrace + URL ${POTRACE_URI} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + URL_HASH MD5=${POTRACE_HASH} + PREFIX ${BUILD_DIR}/potrace + PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${PATCH_DIR}/cmakelists_potrace.txt ${BUILD_DIR}/potrace/src/external_potrace/CMakeLists.txt + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/potrace ${DEFAULT_CMAKE_FLAGS} ${POTRACE_EXTRA_ARGS} + INSTALL_DIR ${LIBDIR}/potrace + ) + if(WIN32) + ExternalProject_Add_Step(external_potrace after_install + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/potrace ${HARVEST_TARGET}/potrace + DEPENDEES install + ) + endif() +endif() diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake index eb5df8204b5..cf598c5455a 100644 --- a/build_files/build_environment/cmake/versions.cmake +++ b/build_files/build_environment/cmake/versions.cmake @@ -320,3 +320,7 @@ set(ISPC_HASH 4bf5e8d0020c4b9980faa702c1a6f25f) set(GMP_VERSION 6.2.0) set(GMP_URI https://gmplib.org/download/gmp/gmp-${GMP_VERSION}.tar.xz) set(GMP_HASH a325e3f09e6d91e62101e59f9bda3ec1) + +set(POTRACE_VERSION 1.16) +set(POTRACE_URI http://potrace.sourceforge.net/download/${POTRACE_VERSION}/potrace-${POTRACE_VERSION}.tar.gz) +set(POTRACE_HASH 5f0bd87ddd9a620b0c4e65652ef93d69) diff --git a/build_files/build_environment/patches/cmakelists_potrace.txt b/build_files/build_environment/patches/cmakelists_potrace.txt new file mode 100644 index 00000000000..c214ff7fd4a --- /dev/null +++ b/build_files/build_environment/patches/cmakelists_potrace.txt @@ -0,0 +1,54 @@ +project(potrace) +cmake_minimum_required(VERSION 2.8) + +include_directories(src/include) + +set(SOURCES + src/backend_dxf.c + src/backend_eps.c + src/backend_geojson.c + src/backend_pdf.c + src/backend_pgm.c + src/backend_svg.c + src/backend_xfig.c + src/bbox.c + src/bitmap_io.c + src/curve.c + src/decompose.c + src/flate.c + src/greymap.c + src/lzw.c + src/potracelib.c + src/progress_bar.c + src/render.c + src/trace.c + src/trans.c +) + +set(HEADERS + src/potracelib.h +) + +if(WIN32) + add_definitions(/D_USE_MATH_DEFINES) +endif() + +add_definitions(/DPOTRACE="POTrace") +add_definitions(/DVERSION="Blender") +add_definitions(/DHAVE_INTTYPES_H) + + +add_library(${PROJECT_NAME} STATIC ${HEADERS} ${SOURCES}) + +set_target_properties(${PROJECT_NAME} PROPERTIES + LIBRARY_OUTPUT_NAME "${PROJECT_NAME}" + PUBLIC_HEADER "${HEADERS}" +) + +install(TARGETS ${PROJECT_NAME} + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + PUBLIC_HEADER DESTINATION include +) + diff --git a/build_files/cmake/Modules/FindPotrace.cmake b/build_files/cmake/Modules/FindPotrace.cmake new file mode 100644 index 00000000000..5b6e68b7f5c --- /dev/null +++ b/build_files/cmake/Modules/FindPotrace.cmake @@ -0,0 +1,65 @@ +# - Find potrace library +# Find the potrace include and library +# This module defines +# POTRACE_INCLUDE_DIRS, where to find potracelib.h, Set when +# POTRACE is found. +# POTRACE_LIBRARIES, libraries to link against to use POTRACE. +# POTRACE_ROOT_DIR, The base directory to search for POTRACE. +# This can also be an environment variable. +# POTRACE_FOUND, If false, do not try to use POTRACE. +# +# also defined, but not for general use are +# POTRACE_LIBRARY, where to find the POTRACE library. + +#============================================================================= +# Copyright 2020 Blender Foundation. +# +# Distributed under the OSI-approved BSD 3-Clause License, +# see accompanying file BSD-3-Clause-license.txt for details. +#============================================================================= + +# If POTRACE_ROOT_DIR was defined in the environment, use it. +IF(NOT POTRACE_ROOT_DIR AND NOT $ENV{POTRACE_ROOT_DIR} STREQUAL "") + SET(POTRACE_ROOT_DIR $ENV{POTRACE_ROOT_DIR}) +ENDIF() + +SET(_potrace_SEARCH_DIRS + ${POTRACE_ROOT_DIR} + /opt/lib/potrace + /usr/include + /usr/local/include +) + +FIND_PATH(POTRACE_INCLUDE_DIR + NAMES + potracelib.h + HINTS + ${_potrace_SEARCH_DIRS} + PATH_SUFFIXES + include +) + +FIND_LIBRARY(POTRACE_LIBRARY + NAMES + potrace + HINTS + ${_potrace_SEARCH_DIRS} + PATH_SUFFIXES + lib64 lib + ) + +# handle the QUIETLY and REQUIRED arguments and set POTRACE_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(POTRACE DEFAULT_MSG + POTRACE_LIBRARY POTRACE_INCLUDE_DIR) + +IF(POTRACE_FOUND) + SET(POTRACE_LIBRARIES ${POTRACE_LIBRARY}) + SET(POTRACE_INCLUDE_DIRS ${POTRACE_INCLUDE_DIR}) +ENDIF() + +MARK_AS_ADVANCED( + POTRACE_INCLUDE_DIR + POTRACE_LIBRARY +) diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake index b2105a58a0a..bf611f56ce1 100644 --- a/build_files/cmake/platform/platform_unix.cmake +++ b/build_files/cmake/platform/platform_unix.cmake @@ -459,6 +459,14 @@ if(WITH_GMP) endif() endif() +if(WITH_POTRACE) + find_package_wrapper(Potrace) + if(NOT POTRACE_FOUND) + message(WARNING "potrace not found, disabling WITH_POTRACE") + set(WITH_POTRACE OFF) + endif() +endif() + if(EXISTS ${LIBDIR}) without_system_libs_end() endif() diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index 64e4b276610..d49b576ba1a 100644 --- a/build_files/cmake/platform/platform_win32.cmake +++ b/build_files/cmake/platform/platform_win32.cmake @@ -760,3 +760,10 @@ if(WITH_GMP) set(GMP_ROOT_DIR ${LIBDIR}/gmp) set(GMP_FOUND On) endif() + +if(WITH_POTRACE) + set(POTRACE_INCLUDE_DIRS ${LIBDIR}/potrace/include) + set(POTRACE_LIBRARIES ${LIBDIR}/potrace/lib/potrace.lib) + set(POTRACE_FOUND On) +endif() +