--- 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
