--- source/MaterialXTest/CMakeLists.txt.orig 2021-03-02 12:41:29.000000000 -0500 +++ source/MaterialXTest/CMakeLists.txt 2021-04-14 23:27:01.000000000 -0400 @@ -81,23 +81,51 @@ endif() endif() +# Hoist the generation of the reference OSL implementation into the +# pre-link portion of the CMake build, instead of waiting until after +# the build completes by using the install() commands (see comment +# below). +if(MATERIALX_BUILD_GEN_OSL) + add_custom_command(TARGET MaterialXTest PRE_LINK + COMMAND ${CMAKE_COMMAND} -E make_directory + ${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/stdlib/reference/osl) + add_custom_command(TARGET MaterialXTest PRE_LINK + COMMAND ${CMAKE_COMMAND} -E copy + "${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/stdlib/osl/*.h" + ${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/stdlib/reference/osl) +endif() + +if(MATERIALX_BUILD_GEN_MDL) + add_custom_command(TARGET MaterialXTest PRE_LINK + COMMAND ${CMAKE_COMMAND} -E copy + "${CMAKE_CURRENT_SOURCE_DIR}/../../source/MaterialXGenMdl/mdl/" + ${CMAKE_CURRENT_BINARY_DIR}/${MATERIALX_INSTALL_MDL_MODULE_PATH}/mdl) +endif() + # TODO: Only do this stuff when it's relevant add_custom_command(TARGET MaterialXTest POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/../../libraries ${CMAKE_CURRENT_BINARY_DIR}/libraries) -if(MATERIALX_BUILD_GEN_OSL) - install(DIRECTORY DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/libraries/stdlib/reference/osl) - install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/stdlib/osl/" - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/libraries/stdlib/reference/osl - FILES_MATCHING PATTERN "*.h") -endif() - -if(MATERIALX_BUILD_GEN_MDL) - install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../source/MaterialXGenMdl/mdl/" - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${MATERIALX_INSTALL_MDL_MODULE_PATH}/mdl) -endif() +# These lines have been removed because they occur way too late. During +# the MacPorts build process, they get added/copied after the build/ +# directory has already been deleted by the MacPorts build system (which +# typically occurs at the end of the build phase). This somehow causes +# them to get generated in a build/ directory inside the destroot tree, +# which results in the files getting placed into +# ${destroot}${worksrcpath}/build/libraries, which is not what we want. +#if(MATERIALX_BUILD_GEN_OSL) +# install(DIRECTORY DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/libraries/stdlib/reference/osl) +# install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/stdlib/osl/" +# DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/libraries/stdlib/reference/osl +# FILES_MATCHING PATTERN "*.h") +#endif() +# +#if(MATERIALX_BUILD_GEN_MDL) +# install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../source/MaterialXGenMdl/mdl/" +# DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${MATERIALX_INSTALL_MDL_MODULE_PATH}/mdl) +#endif() add_custom_command(TARGET MaterialXTest POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory