// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. #pragma once #if defined(_WIN32) || defined(__CYGWIN__) // Windows #if defined(_MSC_VER) #pragma warning(disable : 4251) #else #pragma GCC diagnostic ignored "-Wattributes" #endif #if defined(__cplusplus) && defined(__GNUC__) && !defined(__clang__) // Use C++ attribute syntax where possible to avoid GCC parser bug // (https://stackoverflow.com/questions/57993818/gcc-how-to-combine-attribute-dllexport-and-nodiscard-in-a-struct-de) #define ARROW_DLLEXPORT [[gnu::dllexport]] #define ARROW_DLLIMPORT [[gnu::dllimport]] #else #define ARROW_DLLEXPORT __declspec(dllexport) #define ARROW_DLLIMPORT __declspec(dllimport) #endif // _declspec(dllexport) even when the #included by a non-arrow source #define ARROW_FORCE_EXPORT ARROW_DLLEXPORT #ifdef ARROW_STATIC #define ARROW_EXPORT #define ARROW_FRIEND_EXPORT #define ARROW_TEMPLATE_EXPORT #elif defined(ARROW_EXPORTING) #define ARROW_EXPORT ARROW_DLLEXPORT // For some reason [[gnu::dllexport]] doesn't work well with friend declarations #define ARROW_FRIEND_EXPORT __declspec(dllexport) #define ARROW_TEMPLATE_EXPORT ARROW_DLLEXPORT #else #define ARROW_EXPORT ARROW_DLLIMPORT #define ARROW_FRIEND_EXPORT __declspec(dllimport) #define ARROW_TEMPLATE_EXPORT ARROW_DLLIMPORT #endif #define ARROW_NO_EXPORT #else // Non-Windows #if defined(__cplusplus) && (defined(__GNUC__) || defined(__clang__)) #ifndef ARROW_EXPORT #define ARROW_EXPORT [[gnu::visibility("default")]] #endif #ifndef ARROW_NO_EXPORT #define ARROW_NO_EXPORT [[gnu::visibility("hidden")]] #endif #else // Not C++, or not gcc/clang #ifndef ARROW_EXPORT #define ARROW_EXPORT #endif #ifndef ARROW_NO_EXPORT #define ARROW_NO_EXPORT #endif #endif #define ARROW_FRIEND_EXPORT #define ARROW_TEMPLATE_EXPORT // [[gnu::visibility("default")]] even when #included by a non-arrow source #define ARROW_FORCE_EXPORT [[gnu::visibility("default")]] #endif // Non-Windows