Поиск динамических / общих и статических системных библиотек с использованием ruby ​​rake

Я пытаюсь написать грабли, которые могут выполнять управляемый поиск в системе пользователя для определенных системных библиотек. Основная идея достаточно проста (в полупсевдокоде):

def find_lib names, paths
foreach name, path do
return { :name => name, :path => path } if File.exists? File.join(path, name)
end

return false
end

find_lib ['mylib1.2', 'mylib12'], ['/usr/lib', '/usr/local/lib']

Моя фактическая реализация немного более элегантна, но это показывает основную идею. Тем не менее, я хотел бы сделать эту ОС независимой, которая бросает несколько больших гаечных ключей в механизмы. Каждая операционная система имеет потенциально разные префиксы и расширения для библиотеки. Например, разделяемая библиотека может быть «.dll», «.so» или «.dylib» в зависимости от текущей системы. До сих пор я придумал решение, которое включает в себя создание карты префиксов / расширений на основе в текущей операционной системе:

settings = {}
settings[:dylib_ext] = OS.windows? && ".dll"   ||
OS.mac?     && ".dylib" ||
".so"

Это работает в некоторой степени, хотя оно охватывает только случай динамической библиотеки, а также опирается на внешний гем «ОС», которого я пытался избежать.

Кто-нибудь знает лучший способ выполнения такой задачи, или это решаемая проблема (возможно, с помощью другого драгоценного камня)? Главное, что меня беспокоит, это карта, которая может стать очень громоздкой (не говоря уже о том, что определение правильной операционной системы в лучшем случае довольно утомительно, особенно если вы добавляете cygwin или mingw).

0

Решение

После некоторых размышлений кажется, что я был слишком конкретен в отношении текущей операционной системы пользователя, в то время как я действительно хотел определить, какие функциональные возможности поддерживает система пользователя … Подход, который я в итоге использовал, заключался в определении список возможных комбинаций префикса / суффикса, и проверить каждую из них.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]