# -*- Mode: Python -*- vi:si:et:sw=4:sts=4:ts=4:syntax=python from cerbero.tools.libtool import LibtoolLibrary class Recipe(recipe.Recipe): version = '20161218-2245' name = 'x264' licenses = [License.GPLv2Plus] stype = SourceType.TARBALL configure_tpl = "%(config-sh)s --prefix=%(prefix)s "\ "--libdir=%(libdir)s" configure_options = '--enable-shared --enable-static --enable-pic ' \ '--disable-strip --disable-lavf' url = 'https://download.videolan.org/pub/x264/snapshots/x264-snapshot-%(version)s-stable.tar.bz2' tarball_dirname= 'x264-snapshot-%(version)s-stable' tarball_checksum = 'd4d4fb146fbe64efb0f02d149118a0e93f575417011e4ff898a5079d548b9950' files_libs = ['libx264'] files_bins = ['x264'] files_devel = ['lib/pkgconfig/x264.pc', 'include/x264.h', 'include/x264_config.h'] def prepare(self): # clang x86-32 fails at generating proper asm PIC code # See bug https://bugzilla.gnome.org/show_bug.cgi?id=727079 enable_asm = True AS = ['yasm'] arch = self.config.target_arch if self.config.target_arch == Architecture.X86: arch = 'i686' if self.config.target_platform == Platform.DARWIN: if self.config.target_arch == Architecture.X86: AS = ['yasm', '-O2', '-f', 'macho', '-DPREFIX'] enable_asm = False if self.config.target_platform == Platform.WINDOWS: self.configure_options += ' --enable-win32thread' if self.config.target_arch == Architecture.ARM: # FIXME : Is disabling asm on ARM (< v7) still needed ? enable_asm = False elif Architecture.is_arm(self.config.target_arch): if 'CC' in os.environ: AS = [os.environ['CC']] else: AS = [] if self.config.target_platform == Platform.IOS: if Architecture.is_arm(self.config.target_arch): # x264 ships its own gas-preprocessor.pl AS = ['tools/' + os.environ['GAS']] self.patches = ['x264/0001-Disable-fembed-bitcode-incompatible-argument.patch'] elif self.config.target_arch == Architecture.X86: enable_asm = False if self.config.target_platform == Platform.ANDROID: v = DistroVersion.get_android_api_version(self.config.target_distro_version) # Don't build the cli on Android, it fails with NDK 16 self.configure_options += ' --disable-cli' self.files_bins.remove('x264') if self.config.target_arch in [Architecture.X86_64]: # Fails linking into an android application enable_asm = False elif self.config.target_arch in [Architecture.X86] and v < 24: # passing -mstackrealign consumes an extra register and will # fail compliation. # https://github.com/android-ndk/ndk/issues/690 # https://github.com/android-ndk/ndk/issues/693 enable_asm = False self.set_env('AS', *AS) if enable_asm is False: self.configure_options += ' --disable-asm ' def post_install(self): libtool_la = LibtoolLibrary('x264', 148, None, None, self.config.libdir, self.config.target_platform) libtool_la.save() super().post_install()