[Bf-blender-cvs] [2eec6ec7933] master: Deps: Add potrace as a new library dependency

Ray Molenkamp noreply at git.blender.org
Tue Sep 15 21:16:42 CEST 2020


Commit: 2eec6ec793386cef522193f69e2790a4bd301391
Author: Ray Molenkamp
Date:   Tue Sep 15 13:16:37 2020 -0600
Branches: master
https://developer.blender.org/rB2eec6ec793386cef522193f69e2790a4bd301391

Deps: Add potrace as a new library dependency

For work the GP team plans to land soon (T79877) potrace was taken
on as an additional optional dependency.

This diff adds building the library to the deps builder and takes
care of the integration into the build-system with the `WITH_POTRACE`
cmake switch.

Differential Revision: https://developer.blender.org/D8662

Reviewed by: brecht, sergey

===================================================================

M	CMakeLists.txt
M	build_files/build_environment/CMakeLists.txt
M	build_files/build_environment/cmake/harvest.cmake
A	build_files/build_environment/cmake/potrace.cmake
M	build_files/build_environment/cmake/versions.cmake
A	build_files/build_environment/patches/cmakelists_potrace.txt
A	build_files/cmake/Modules/FindPotrace.cmake
M	build_files/cmake/platform/platform_unix.cmake
M	build_files/cmake/platform/platform_win32.cmake

===================================================================

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()
+



More information about the Bf-blender-cvs mailing list