mirror of
https://github.com/macports/macports-ports.git
synced 2026-07-12 18:20:25 -07:00
275 lines
11 KiB
Tcl
275 lines
11 KiB
Tcl
# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
|
|
|
|
PortSystem 1.0
|
|
PortGroup github 1.0
|
|
PortGroup cmake 1.1
|
|
|
|
github.setup materialx MaterialX 1.38.2 v
|
|
name materialx
|
|
revision 1
|
|
categories graphics
|
|
platforms darwin
|
|
license Apache-2
|
|
maintainers @jasonliu--
|
|
|
|
homepage https://www.materialx.org
|
|
description library for describing materials and textures in \
|
|
computer graphics applications
|
|
long_description MaterialX is an open standard specification and \
|
|
library API, developed at Lucasfilm and Industrial \
|
|
Light & Magic, for describing and transferring \
|
|
rich material and look-development content between \
|
|
applications and renderers. MaterialX addresses \
|
|
the need for a common, open standard to represent \
|
|
the data values and relationships required to \
|
|
transfer the complete look of a computer graphics \
|
|
model from one application or rendering platform \
|
|
to another, including shading networks, patterns \
|
|
and texturing, complex nested materials, and \
|
|
geometric assignments.
|
|
|
|
github.tarball_from downloads
|
|
extract.rename yes
|
|
|
|
checksums rmd160 42a0c04554dec0d118a9cdf2b2e6010fde2a2311 \
|
|
sha256 640c2005ea84e7b57e287b59bceb57b31a5f7f751a150c4a6967292feadec9ea \
|
|
size 69168871
|
|
|
|
# MaterialX requires C++2011 but OpenImageIO uses C++2014
|
|
compiler.cxx_standard 2014
|
|
|
|
# enforce to using the same compiler that is used for osl
|
|
set llvm_version 14
|
|
# pin the used version for LLVM before 10.13 to
|
|
# which is forced by used version of osl
|
|
if {${os.platform} eq "darwin" && ${os.major} < 18} {
|
|
set llvm_version 11
|
|
}
|
|
|
|
compiler.blacklist-append clang
|
|
compiler.fallback macports-clang-${llvm_version}
|
|
|
|
post-patch {
|
|
reinplace -E {s|CMAKE_CXX_STANDARD 11|CMAKE_CXX_STANDARD 14|} \
|
|
${worksrcpath}/CMakeLists.txt
|
|
|
|
}
|
|
|
|
if {${os.major} < 16} {
|
|
# Add AppKit wrapper header to compiler library paths
|
|
configure.cflags-prepend -isystem ${filespath}/old_appkit_compat
|
|
configure.cxxflags-prepend -isystem ${filespath}/old_appkit_compat
|
|
configure.objcflags-prepend -isystem ${filespath}/old_appkit_compat
|
|
configure.objcxxflags-prepend -isystem ${filespath}/old_appkit_compat
|
|
}
|
|
|
|
configure.args-append -DMATERIALX_BUILD_TESTS=OFF \
|
|
-DMATERIAL_BUILD_SHARED_LIBS=ON
|
|
|
|
post-destroot {
|
|
# MaterialX's build files puts files into a ${prefix}/cmake folder
|
|
# during the build, and doesn't provide an easy way to re-target
|
|
# the location. So we manually move the folder to a location that
|
|
# actually makes sense.
|
|
xinstall -d ${destroot}${prefix}/share/cmake
|
|
move ${destroot}${prefix}/cmake \
|
|
${destroot}${prefix}/share/cmake/MaterialX
|
|
xinstall -d ${destroot}${prefix}/share/cmake/Modules
|
|
xinstall -m 644 {*}[glob ${worksrcpath}/cmake/modules/*] \
|
|
${destroot}${prefix}/share/cmake/Modules
|
|
|
|
# MaterialX puts many output files into the resources/ and
|
|
# libraries/ directories, which MaterialX's build files assume are
|
|
# located in ${CMAKE_INSTALL_PREFIX}. Since leaving these
|
|
# directories as ${prefix}/resources and ${prefix}/libraries
|
|
# violates MacPorts' mtree layout, we move them to a location that
|
|
# actually makes sense.
|
|
set mtlx_share_path ${destroot}${prefix}/share/MaterialX
|
|
if {![file exists $mtlx_share_path]} {
|
|
xinstall -d $mtlx_share_path
|
|
}
|
|
set dirs [list resources libraries]
|
|
foreach dir $dirs {
|
|
if {[file exists ${destroot}${prefix}/$dir]} {
|
|
move ${destroot}${prefix}/$dir $mtlx_share_path
|
|
}
|
|
}
|
|
|
|
if {[file exists ${destroot}${prefix}/CHANGELOG.md]} {
|
|
move ${destroot}${prefix}/CHANGELOG.md $mtlx_share_path
|
|
}
|
|
if {[file exists ${destroot}${prefix}/README.md]} {
|
|
move ${destroot}${prefix}/README.md $mtlx_share_path
|
|
}
|
|
|
|
fs-traverse f $mtlx_share_path/resources {
|
|
if {[file isfile $f] && [file tail $f] eq "CMakeLists.txt"} {
|
|
delete $f
|
|
}
|
|
}
|
|
}
|
|
|
|
livecheck.regex releases/tag/v(\\d+\\.\\d+\\.\\d+)
|
|
|
|
variant viewer description {Build the MaterialX viewer} {
|
|
depends_lib-append port:nanogui-wjakob
|
|
|
|
post-patch {
|
|
reinplace "/return searchPath/i\\
|
|
\\ // Default search path for MacPorts shared directory.\\
|
|
\\ mx::FilePath macportsSharePath = mx::FilePath(\"${prefix}/share/MaterialX\");\\
|
|
\\ if (macportsSharePath.exists())\\
|
|
\\ {\\
|
|
\\ searchPath.append(macportsSharePath);\\
|
|
\\ searchPath.append(macportsSharePath / \"resources\");\\
|
|
\\ }\\
|
|
\\
|
|
" \
|
|
${worksrcpath}/source/MaterialXView/Main.cpp
|
|
}
|
|
|
|
configure.args-append -DMATERIALX_BUILD_VIEWER=ON \
|
|
-DMATERIALX_NANOGUI_EXTERNAL=ON \
|
|
-DNANOGUI_EXTRA_LIBS=glfw \
|
|
-DNANOGUI_EXTRA_INCS="${prefix}/include\;${prefix}/include/eigen3\;${prefix}/include/nanovg"
|
|
|
|
notes-append "To view the examples, you can launch the viewer\
|
|
by running `MaterialXView` in a terminal window,\
|
|
and then loading the files located in\
|
|
${prefix}/share/MaterialX/resources."
|
|
}
|
|
|
|
variant oiio requires viewer \
|
|
description {Enable support for additional image formats in the MaterialX viewer} \
|
|
{
|
|
depends_lib-append port:openimageio
|
|
|
|
patchfiles-append patch-MaterialXRender-oiio-reference.diff
|
|
|
|
configure.args-append -DMATERIALX_BUILD_OIIO=ON
|
|
}
|
|
|
|
variant docs description {Build documentation} {
|
|
depends_build-append path:bin/doxygen:doxygen
|
|
|
|
post-patch {
|
|
# The CMake script that is supposed to generate the
|
|
# doxymentation is missing an 'ALL' argument in its
|
|
# add_custom_target() command, which means that it never gets
|
|
# executed during the MacPorts build process. So we add it here.
|
|
# Reference:
|
|
# https://stackoverflow.com/questions/34878276/build-doxygen-from-cmake-script
|
|
reinplace -E {s|(add_custom_target.MaterialXDocs)|\1 ALL|} \
|
|
${worksrcpath}/documents/CMakeLists.txt
|
|
|
|
# By default, MaterialX puts its generated doxymentation into
|
|
# ${CMAKE_INSTALL_PREFIX}/documents. We change it so that
|
|
# MaterialX places the doxymentation into a location that
|
|
# conforms with MacPorts' mtree layout.
|
|
reinplace -E {s|(CMAKE_INSTALL_PREFIX.*)documents|\1share/doc|} \
|
|
${worksrcpath}/documents/CMakeLists.txt
|
|
|
|
foreach d [list Contributing Images Specification] {
|
|
reinplace "\$a\\
|
|
\\
|
|
install(DIRECTORY \${CMAKE_CURRENT_SOURCE_DIR}/$d\\
|
|
\\ DESTINATION \"\${CMAKE_INSTALL_PREFIX}/share/doc/MaterialX\"\\
|
|
\\ MESSAGE_NEVER)\\
|
|
" \
|
|
${worksrcpath}/documents/CMakeLists.txt
|
|
}
|
|
}
|
|
|
|
configure.args-append -DMATERIALX_BUILD_DOCS=ON
|
|
|
|
post-destroot {
|
|
set materialxdocs ${destroot}${prefix}/share/doc/MaterialXDocs
|
|
if {[file exists $materialxdocs]} {
|
|
foreach f [glob -directory $materialxdocs *] {
|
|
move $f ${destroot}${prefix}/share/doc/MaterialX
|
|
}
|
|
delete $materialxdocs
|
|
}
|
|
}
|
|
}
|
|
|
|
variant tests description {Build unit tests} {
|
|
# MaterialX unit tests need to be able to call the Open Shading
|
|
# Language (OSL) compiler, which is an executable binary. However,
|
|
# OSL is not needed to build the unit tests, and MaterialX doesn't
|
|
# link to any libs from OSL; hence the reason for using depends_run.
|
|
depends_run-append bin:oslc:osl
|
|
|
|
patchfiles-append patch-MaterialXTest-reference_impl.diff
|
|
|
|
configure.args-replace -DMATERIALX_BUILD_TESTS=OFF \
|
|
-DMATERIALX_BUILD_TESTS=ON
|
|
configure.args-append -DMATERIALX_OSLC_EXECUTABLE=${prefix}/bin/oslc \
|
|
-DMATERIALX_TESTRENDER_EXECUTABLE=${prefix}/bin/testrender \
|
|
-DMATERIALX_OSL_INCLUDE_PATH=${prefix}/share/OSL/shaders
|
|
|
|
post-destroot {
|
|
set mdl ${destroot}${prefix}/mdl
|
|
if {[file exists $mdl]} {
|
|
move $mdl ${destroot}${prefix}/share/MaterialX/
|
|
}
|
|
}
|
|
}
|
|
|
|
default_variants +viewer +oiio +docs +tests
|
|
|
|
### The following code was adapted from the portfiles
|
|
### of ports such as openvdb and openimageio
|
|
|
|
set pythons_suffixes {310 311}
|
|
|
|
set pythons_ports {}
|
|
foreach s ${pythons_suffixes} {
|
|
lappend pythons_ports python${s}
|
|
}
|
|
|
|
foreach s ${pythons_suffixes} {
|
|
set p python${s}
|
|
set v [string index ${s} 0].[string range ${s} 1 end]
|
|
set i [lsearch -exact ${pythons_ports} ${p}]
|
|
set c [lreplace ${pythons_ports} ${i} ${i}]
|
|
variant ${p} conflicts {*}${c} \
|
|
description "Build the Python ${v} bindings (PyMaterialX)" {}
|
|
if {[variant_isset ${p}]} {
|
|
# Note: We basically need to import the value of ${v}, otherwise
|
|
# all foreach iterations will end up with the same value of
|
|
# ${v}! This appears to be related to how Tcl does scoping.
|
|
set selected_v ${v}
|
|
depends_lib-append port:${p} \
|
|
port:pybind11
|
|
|
|
patchfiles-append patch-python-paths.diff
|
|
post-patch {
|
|
reinplace {/pybind11Tools/s/^/#/} \
|
|
${worksrcpath}/source/PyMaterialX/CMakeLists.txt
|
|
}
|
|
|
|
configure.args-append -DMATERIALX_BUILD_PYTHON=ON \
|
|
-DMATERIALX_PYTHON_VERSION=$selected_v \
|
|
-DPYTHON_INSTALL_PREFIX=${destroot}${frameworks_dir}/Python.framework/Versions/$selected_v/
|
|
|
|
post-destroot {
|
|
# MaterialX insists on outputting all Python-related
|
|
# products into the ${CMAKE_INSTALL_PREFIX}/python
|
|
# directory. Since leaving this directory as
|
|
# ${prefix}/python violates MacPorts' mtree layout, we move
|
|
# its contents to a location that actually makes sense.
|
|
if {[file exists ${destroot}${prefix}/python/MaterialX]} {
|
|
foreach so [glob ${destroot}${prefix}/python/MaterialX/*.so] {
|
|
move $so ${destroot}${prefix}/lib/
|
|
}
|
|
set remaining_files \
|
|
[glob -nocomplain ${destroot}${prefix}/python/MaterialX/*]
|
|
if {[llength $remaining_files] == 0} {
|
|
delete ${destroot}${prefix}/python
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|