| 1033 | } |
| 1034 | |
| 1035 | SC::Result SC::PluginRegistry::removeAllBuildProducts(StringSpan identifier) |
| 1036 | { |
| 1037 | PluginDynamicLibrary* res = findPlugin(identifier); |
| 1038 | SC_TRY(res != nullptr); |
| 1039 | PluginDynamicLibrary& lib = *res; |
| 1040 | StringPath buffer; |
| 1041 | |
| 1042 | #if SC_PLATFORM_WINDOWS |
| 1043 | SC_TRY(PluginString::assign(buffer, {lib.definition.directory.view(), SC_NATIVE_STR("/"), identifier, ".lib"})); |
| 1044 | SC_TRY(PluginFileSystem::removeFileAbsolute(buffer.view())); |
| 1045 | SC_TRY(PluginString::assign(buffer, {lib.definition.directory.view(), SC_NATIVE_STR("/"), identifier, ".exp"})); |
| 1046 | SC_TRY(PluginFileSystem::removeFileAbsolute(buffer.view())); |
| 1047 | SC_TRY(PluginString::assign(buffer, {lib.definition.directory.view(), SC_NATIVE_STR("/"), identifier, ".ilk"})); |
| 1048 | SC_TRY(PluginFileSystem::removeFileAbsolute(buffer.view())); |
| 1049 | SC_TRY(PluginString::assign(buffer, {lib.definition.directory.view(), SC_NATIVE_STR("/"), identifier, ".dll"})); |
| 1050 | int numTries = 10; |
| 1051 | while (not PluginFileSystem::removeFileAbsolute(buffer.view())) |
| 1052 | { |
| 1053 | ::Sleep(10); // It looks like FreeLibrary needs some time to avoid getting access denied |
| 1054 | numTries--; |
| 1055 | SC_TRY_MSG(numTries >= 0, "PluginRegistry: Cannot remove dll"); |
| 1056 | } |
| 1057 | #elif SC_PLATFORM_APPLE |
| 1058 | SC_TRY(PluginString::assign(buffer, {lib.definition.directory.view(), "/", identifier, ".dylib"})); |
| 1059 | SC_TRY(PluginFileSystem::removeFileAbsolute(buffer.view())); |
| 1060 | #else |
| 1061 | SC_TRY(PluginString::assign(buffer, {lib.definition.directory.view(), "/", identifier, ".so"})); |
| 1062 | SC_TRY(PluginFileSystem::removeFileAbsolute(buffer.view())); |
| 1063 | #endif |
| 1064 | for (auto& file : lib.definition.files) |
| 1065 | { |
| 1066 | StringSpan outputName = PluginString::basename(file.absolutePath.view(), SC_NATIVE_STR(".cpp")); |
| 1067 | |
| 1068 | StringPath destFile; |
| 1069 | SC_TRY(PluginString::join(destFile, {lib.definition.directory.view(), outputName})); |
| 1070 | SC_TRY(destFile.append(".o")); |
| 1071 | SC_TRY(PluginFileSystem::removeFileAbsolute(destFile.view())); |
| 1072 | } |
| 1073 | return Result(true); |
| 1074 | } |