1 /* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */ 2 /* 3 * Copyright (c) 1993, 1994, 1995, 1996, 1997 4 * The Regents of the University of California. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. All advertising materials mentioning features or use of this software 15 * must display the following acknowledgement: 16 * This product includes software developed by the Computer Systems 17 * Engineering Group at Lawrence Berkeley Laboratory. 18 * 4. Neither the name of the University nor of the Laboratory may be used 19 * to endorse or promote products derived from this software without 20 * specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 * SUCH DAMAGE. 33 */ 34 35 #ifndef lib_pcap_export_defs_h 36 #define lib_pcap_export_defs_h 37 38 /* 39 * PCAP_API_DEF must be used when defining *data* exported from 40 * libpcap. It can be used when defining *functions* exported 41 * from libpcap, but it doesn't have to be used there. It 42 * should not be used in declarations in headers. 43 * 44 * PCAP_API must be used when *declaring* data or functions 45 * exported from libpcap; PCAP_API_DEF won't work on all platforms. 46 */ 47 48 /* 49 * Check whether this is GCC major.minor or a later release, or some 50 * compiler that claims to be "just like GCC" of that version or a 51 * later release. 52 */ 53 #define IS_AT_LEAST_GNUC_VERSION(major, minor) \ 54 (defined(__GNUC__) && \ 55 (__GNUC__ > (major) || \ 56 (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))) 57 58 #if defined(_WIN32) 59 #ifdef BUILDING_PCAP 60 /* 61 * We're compiling libpcap, so we should export functions in our 62 * API. 63 */ 64 #define PCAP_API_DEF __declspec(dllexport) 65 #else 66 #define PCAP_API_DEF __declspec(dllimport) 67 #endif 68 #elif defined(MSDOS) 69 /* XXX - does this need special treatment? */ 70 #define PCAP_API_DEF 71 #else /* UN*X */ 72 #ifdef BUILDING_PCAP 73 /* 74 * We're compiling libpcap, so we should export functions in our API. 75 * The compiler might be configured not to export functions from a 76 * shared library by default, so we might have to explicitly mark 77 * functions as exported. 78 */ 79 #if IS_AT_LEAST_GNUC_VERSION(3, 4) 80 /* 81 * GCC 3.4 or later, or some compiler asserting compatibility with 82 * GCC 3.4 or later, so we have __attribute__((visibility()). 83 */ 84 #define PCAP_API_DEF __attribute__((visibility("default"))) 85 #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) 86 /* 87 * Sun C 5.5 or later, so we have __global. 88 * (Sun C 5.9 and later also have __attribute__((visibility()), 89 * but there's no reason to prefer it with Sun C.) 90 */ 91 #define PCAP_API_DEF __global 92 #else 93 /* 94 * We don't have anything to say. 95 */ 96 #define PCAP_API_DEF 97 #endif 98 #else 99 /* 100 * We're not building libpcap. 101 */ 102 #define PCAP_API_DEF 103 #endif 104 #endif /* _WIN32/MSDOS/UN*X */ 105 106 #define PCAP_API PCAP_API_DEF extern 107 108 #endif /* lib_pcap_export_defs_h */ 109