# -*- Mode: Python -*- vi:si:et:sw=4:sts=4:ts=4:syntax=python import shutil GMP_H_UNVERSAL='''\ #ifdef __i386__ #include "i386/gmp.h" #elif defined(__ppc__) #include "ppc/gmp.h" #elif defined(__x86_64__) #include "x86_64/gmp.h" #elif defined(__arm__) #include "arm/gmp.h" #elif defined(__arm64__) #include "arm64/gmp.h" #else #error "Unsupported Architecture" #endif ''' class Recipe(recipe.Recipe): name = 'gmp' version = '6.1.0' url = 'http://ftp.gnu.org/gnu/gmp/gmp-6.1.0.tar.xz' stype = SourceType.TARBALL licenses = [License.LGPLv3Plus] tarball_dirname = 'gmp-6.1.0' files_libs = ['libgmp'] files_devel = ['include/gmp.h'] def prepare(self): if self.config.target_platform == Platform.WINDOWS: self.configure_options = ' --enable-shared --disable-static' elif self.config.target_platform == Platform.IOS: self.configure_options = ' --disable-assembly' if self.config.target_platform in [Platform.DARWIN, Platform.IOS]: self.files_devel.append(os.path.join('include', '*', 'gmp.h')) def post_install(self): if self.config.target_platform == Platform.WINDOWS: src = os.path.join(self.config.prefix, 'lib', 'libgmp-10.dll') dll = os.path.join(self.config.prefix, 'bin', 'libgmp-10.dll') dll_a = os.path.join(self.config.prefix, 'lib', 'libgmp.dll.a') if os.path.exists(dll_a): os.remove(dll_a) shutil.copy(src, dll) shutil.copy(src, dll_a) gmp_la = os.path.join(self.config.prefix, 'lib', 'libgmp.la') shell.replace(gmp_la, {'libgmp.lib': 'libgmp.dll.a'}) elif self.config.target_platform in [Platform.DARWIN, Platform.IOS]: # For the universal build we need to ship gmp.h of both # architectures in a subfolder and include the correct one depending # on the compiler architecture arch = self.config.target_arch if arch == Architecture.X86: arch = 'i386' elif arch == Architecture.ARM64: arch = 'arm64' elif Architecture.is_arm(arch): arch = 'arm' arch_dir = os.path.join(self.config.prefix, 'include', arch) if not os.path.exists(arch_dir): os.makedirs(arch_dir) shutil.copyfile(os.path.join(self.build_dir, 'gmp.h'), os.path.join(arch_dir, 'gmp.h')) with open(os.path.join(self.config.prefix, 'include', 'gmp.h'), 'w+') as f: f.write(GMP_H_UNVERSAL)