# File lib/listen/adapter.rb, line 40
    def self.select_and_initialize(directories, options = {}, &callback)
      return Adapters::Polling.new(directories, options, &callback) if options.delete(:force_polling)

      warning = ''

      begin
        if Adapters::Darwin.usable_and_works?(directories, options)
          return Adapters::Darwin.new(directories, options, &callback)
        elsif Adapters::Linux.usable_and_works?(directories, options)
          return Adapters::Linux.new(directories, options, &callback)
        elsif Adapters::Windows.usable_and_works?(directories, options)
          return Adapters::Windows.new(directories, options, &callback)
        end
      rescue DependencyManager::Error => e
        warning += e.message + "\n" + MISSING_DEPENDENCY_MESSAGE
      end

      unless options[:polling_fallback_message] == false
        warning += options[:polling_fallback_message] || POLLING_FALLBACK_MESSAGE
        Kernel.warn "[Listen warning]:\n" + warning.gsub(/^(.*)/, '  \1')
      end

      Adapters::Polling.new(directories, options, &callback)
    end