from conans import CMake, ConanFile, tools import os class OpenALConan(ConanFile): name = "openal" version = "1.19.0" description = "OpenAL Soft is a software implementation of the OpenAL 3D audio API." topics = ("conan", "openal", "audio", "api") url = "http://github.com/bincrafters/conan-openal" homepage = "https://www.openal.org" author = "Bincrafters " license = "MIT" exports = ["LICENSE.md"] exports_sources = ["CMakeLists.txt"] generators = "cmake" settings = "os", "arch", "compiler", "build_type" options = {"shared": [True, False], "fPIC": [True, False]} default_options = {'shared': False, 'fPIC': True} _source_subfolder = "source_subfolder" _build_subfolder = "build_subfolder" def configure(self): if self.settings.os == 'Windows': del self.options.fPIC del self.settings.compiler.libcxx def requirements(self): if self.settings.os == "Linux": self.requires("libalsa/1.1.5@conan/stable") def source(self): source_url = "https://github.com/kcat/openal-soft" sha256 = "bb26bc1d40010f059b3cffd336a09bf07f428b1115f00869ff995eb094a382b9" tools.get("{0}/archive/openal-soft-{1}.tar.gz".format(source_url, self.version), sha256=sha256) extracted_dir = "openal-soft-openal-soft-" + self.version os.rename(extracted_dir, self._source_subfolder) def _configure_cmake(self): cmake = CMake(self) cmake.definitions['LIBTYPE'] = 'SHARED' if self.options.shared else 'STATIC' cmake.definitions['ALSOFT_UTILS'] = False cmake.definitions['ALSOFT_EXAMPLES'] = False cmake.definitions['ALSOFT_TESTS'] = False cmake.definitions['CMAKE_DISABLE_FIND_PACKAGE_SoundIO'] = True cmake.configure(build_folder=self._build_subfolder) return cmake def build(self): cmake = self._configure_cmake() cmake.build() def package(self): self.copy(pattern="LICENSE", dst="licenses", src=self._source_subfolder) cmake = self._configure_cmake() cmake.install() self.copy("*COPYING", dst="licenses", keep_path=False, ignore_case=True) def package_info(self): if self.settings.os == "Windows": self.cpp_info.libs = ["OpenAL32", 'winmm'] else: self.cpp_info.libs = ["openal"] if self.settings.os == 'Linux': self.cpp_info.libs.extend(['dl', 'm']) elif self.settings.os == 'Macos': frameworks = ['AudioToolbox', 'CoreAudio'] for framework in frameworks: self.cpp_info.exelinkflags.append("-framework %s" % framework) self.cpp_info.sharedlinkflags = self.cpp_info.exelinkflags self.cpp_info.includedirs = ["include", "include/AL"] if not self.options.shared: self.cpp_info.defines.append('AL_LIBTYPE_STATIC')