1find_package(VORO)
2if(VORO_FOUND)
3  set(DOWNLOAD_VORO_DEFAULT OFF)
4else()
5  set(DOWNLOAD_VORO_DEFAULT ON)
6endif()
7option(DOWNLOAD_VORO "Download and compile the Voro++ library instead of using an already installed one" ${DOWNLOAD_VORO_DEFAULT})
8if(DOWNLOAD_VORO)
9  message(STATUS "Voro++ download requested - we will build our own")
10  set(VORO_URL "${LAMMPS_THIRDPARTY_URL}/voro++-0.4.6.tar.gz" CACHE STRING "URL for Voro++ tarball")
11  set(VORO_MD5 "2338b824c3b7b25590e18e8df5d68af9" CACHE STRING "MD5 checksum for Voro++ tarball")
12  mark_as_advanced(VORO_URL)
13  mark_as_advanced(VORO_MD5)
14
15  include(ExternalProject)
16
17  if(BUILD_SHARED_LIBS)
18    set(VORO_BUILD_CFLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}")
19  else()
20    set(VORO_BUILD_CFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}")
21  endif()
22  if(APPLE)
23    get_filename_component(VORO_CXX ${CMAKE_CXX_COMPILER} NAME_WE)
24    set(VORO_BUILD_OPTIONS CXX=${VORO_CXX} CFLAGS=${VORO_BUILD_CFLAGS})
25  else()
26    set(VORO_BUILD_OPTIONS CXX=${CMAKE_CXX_COMPILER} CFLAGS=${VORO_BUILD_CFLAGS})
27  endif()
28
29  find_program(HAVE_PATCH patch)
30  if(NOT HAVE_PATCH)
31    message(FATAL_ERROR "The 'patch' program is required to build the voro++ library")
32  endif()
33
34  ExternalProject_Add(voro_build
35    URL     ${VORO_URL}
36    URL_MD5 ${VORO_MD5}
37    PATCH_COMMAND patch -b -p0 < ${LAMMPS_LIB_SOURCE_DIR}/voronoi/voro-make.patch
38    CONFIGURE_COMMAND ""
39    BUILD_COMMAND make ${VORO_BUILD_OPTIONS}
40    BUILD_IN_SOURCE 1
41    INSTALL_COMMAND ""
42    BUILD_BYPRODUCTS <SOURCE_DIR>/src/libvoro++.a
43    )
44  ExternalProject_get_property(voro_build SOURCE_DIR)
45  file(MAKE_DIRECTORY ${SOURCE_DIR}/src)
46  add_library(LAMMPS::VORO UNKNOWN IMPORTED)
47  set_target_properties(LAMMPS::VORO PROPERTIES
48    IMPORTED_LOCATION "${SOURCE_DIR}/src/libvoro++.a"
49    INTERFACE_INCLUDE_DIRECTORIES "${SOURCE_DIR}/src")
50  target_link_libraries(lammps PRIVATE LAMMPS::VORO)
51  add_dependencies(LAMMPS::VORO voro_build)
52else()
53  find_package(VORO)
54  if(NOT VORO_FOUND)
55    message(FATAL_ERROR "Voro++ library not found. Help CMake to find it by setting VORO_LIBRARY and VORO_INCLUDE_DIR, or set DOWNLOAD_VORO=ON to download it")
56  endif()
57  target_link_libraries(lammps PRIVATE VORO::VORO)
58endif()
59