- string::size_type i = 0;
- for(unsigned dots=0; i<version.size(); ++i)
- if(version[i]=='.' && ++dots>=2)
- break;
-
- const Architecture &arch = builder.get_current_arch();
- const Pattern &pattern = arch.get_shared_library_patterns().front();
- if(arch.get_system()=="windows")
- soname = pattern.apply(format("%s-%s", component->get_name(), version.substr(0, i)));
- else
- soname = format("%s.%s", pattern.apply(component->get_name()), version.substr(0, i));
-
- install_filename = soname;
+ const string &version = component->get_package().get_interface_version();
+ if(!version.empty())
+ {
+ const Architecture &arch = builder.get_current_arch();
+ if(arch.get_system()=="windows")
+ soname = arch.create_filename<SharedLibrary>(format("%s-%s", libname, version));
+ else if(arch.get_system()=="darwin")
+ soname = arch.create_filename<SharedLibrary>(format("%s.%s", libname, version));
+ else
+ soname = format("%s.%s", arch.create_filename<SharedLibrary>(libname), version);
+
+ install_filename = soname;
+ }