1 2import os 3import sys 4 5from distutils.command.build_ext import build_ext 6 7 8cares_sources = [ 9 'deps/c-ares/src/ares__close_sockets.c', 10 'deps/c-ares/src/ares__get_hostent.c', 11 'deps/c-ares/src/ares__read_line.c', 12 'deps/c-ares/src/ares__timeval.c', 13 'deps/c-ares/src/ares_android.c', 14 'deps/c-ares/src/ares_cancel.c', 15 'deps/c-ares/src/ares_create_query.c', 16 'deps/c-ares/src/ares_data.c', 17 'deps/c-ares/src/ares_destroy.c', 18 'deps/c-ares/src/ares_expand_name.c', 19 'deps/c-ares/src/ares_expand_string.c', 20 'deps/c-ares/src/ares_fds.c', 21 'deps/c-ares/src/ares_free_hostent.c', 22 'deps/c-ares/src/ares_free_string.c', 23 'deps/c-ares/src/ares_gethostbyaddr.c', 24 'deps/c-ares/src/ares_gethostbyname.c', 25 'deps/c-ares/src/ares_getnameinfo.c', 26 'deps/c-ares/src/ares_getopt.c', 27 'deps/c-ares/src/ares_getsock.c', 28 'deps/c-ares/src/ares_init.c', 29 'deps/c-ares/src/ares_library_init.c', 30 'deps/c-ares/src/ares_llist.c', 31 'deps/c-ares/src/ares_mkquery.c', 32 'deps/c-ares/src/ares_nowarn.c', 33 'deps/c-ares/src/ares_options.c', 34 'deps/c-ares/src/ares_parse_a_reply.c', 35 'deps/c-ares/src/ares_parse_aaaa_reply.c', 36 'deps/c-ares/src/ares_parse_mx_reply.c', 37 'deps/c-ares/src/ares_parse_naptr_reply.c', 38 'deps/c-ares/src/ares_parse_ns_reply.c', 39 'deps/c-ares/src/ares_parse_ptr_reply.c', 40 'deps/c-ares/src/ares_parse_soa_reply.c', 41 'deps/c-ares/src/ares_parse_srv_reply.c', 42 'deps/c-ares/src/ares_parse_txt_reply.c', 43 'deps/c-ares/src/ares_process.c', 44 'deps/c-ares/src/ares_query.c', 45 'deps/c-ares/src/ares_search.c', 46 'deps/c-ares/src/ares_send.c', 47 'deps/c-ares/src/ares_strcasecmp.c', 48 'deps/c-ares/src/ares_strdup.c', 49 'deps/c-ares/src/ares_strerror.c', 50 'deps/c-ares/src/ares_strsplit.c', 51 'deps/c-ares/src/ares_timeout.c', 52 'deps/c-ares/src/ares_version.c', 53 'deps/c-ares/src/ares_writev.c', 54 'deps/c-ares/src/bitncmp.c', 55 'deps/c-ares/src/inet_net_pton.c', 56 'deps/c-ares/src/inet_ntop.c', 57] 58 59if sys.platform == 'win32': 60 cares_sources += ['deps/c-ares/src/windows_port.c', 61 'deps/c-ares/src/ares_platform.c'] 62 63 64class cares_build_ext(build_ext): 65 cares_dir = os.path.join('deps', 'c-ares') 66 67 def build_extensions(self): 68 self.compiler.add_include_dir(os.path.join(self.cares_dir, 'src')) 69 if sys.platform != 'win32': 70 self.compiler.define_macro('HAVE_CONFIG_H', 1) 71 self.compiler.define_macro('_LARGEFILE_SOURCE', 1) 72 self.compiler.define_macro('_FILE_OFFSET_BITS', 64) 73 if sys.platform.startswith('linux'): 74 # Check if it's actually Android 75 if os.environ.get('ANDROID_ROOT') and os.environ.get('ANDROID_DATA'): 76 self.compiler.add_include_dir(os.path.join(self.cares_dir, 'src/config_android')) 77 else: 78 self.compiler.add_include_dir(os.path.join(self.cares_dir, 'src/config_linux')) 79 self.compiler.add_library('dl') 80 self.compiler.add_library('rt') 81 elif sys.platform == 'darwin': 82 self.compiler.add_include_dir(os.path.join(self.cares_dir, 'src/config_darwin')) 83 self.compiler.define_macro('_DARWIN_USE_64_BIT_INODE', 1) 84 elif sys.platform.startswith('freebsd'): 85 self.compiler.add_include_dir(os.path.join(self.cares_dir, 'src/config_freebsd')) 86 self.compiler.add_library('kvm') 87 elif sys.platform.startswith('dragonfly'): 88 self.compiler.add_include_dir(os.path.join(self.cares_dir, 'src/config_freebsd')) 89 elif sys.platform.startswith('netbsd'): 90 self.compiler.add_include_dir(os.path.join(self.cares_dir, 'src/config_netbsd')) 91 elif sys.platform.startswith('openbsd'): 92 self.compiler.add_include_dir(os.path.join(self.cares_dir, 'src/config_openbsd')) 93 elif sys.platform.startswith('sunos'): 94 self.compiler.add_include_dir(os.path.join(self.cares_dir, 'src/config_sunos')) 95 self.compiler.add_library('socket') 96 self.compiler.add_library('nsl') 97 self.compiler.add_library('kstat') 98 elif sys.platform == 'cygwin': 99 self.compiler.add_include_dir(os.path.join(self.cares_dir, 'src/config_cygwin')) 100 elif sys.platform == 'win32': 101 if 'mingw' not in self.compiler.compiler_type: 102 self.extensions[0].extra_link_args = ['/NODEFAULTLIB:libcmt'] 103 self.compiler.add_library('advapi32') 104 self.compiler.add_library('iphlpapi') 105 self.compiler.add_library('psapi') 106 self.compiler.add_library('ws2_32') 107 self.compiler.define_macro('CARES_PULL_WS2TCPIP_H', 1) 108 self.extensions[0].sources += cares_sources 109 build_ext.build_extensions(self) 110