From 39602514e2c7aa990d4d361adbd9a89bdfd147dd Mon Sep 17 00:00:00 2001 From: "Victor M. Alvarez" Date: Thu, 2 Aug 2018 11:57:53 +0200 Subject: [PATCH] Use YR_BUILDING_DLL and YR_IMPORTING_DLL for controlling the semantics of YR_API (#924) For compiling YARA in Windows as a DLL you must define YR_BUILDING_DLL. For using it that DLL in your project you must define YR_IMPORTING_DLL. This allows to use the same header files in both cases. If YR_BUILDING_DLL is defined, YR_API translates to __declspec(dllexport), if YR_IMPORTING_DLL is defined YR_API translates to __declspec(dllimport). --- libyara/include/yara/utils.h | 41 ++++++++++++++++++-------- windows/vs2015/libyara/libyara.vcxproj | 8 ++--- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/libyara/include/yara/utils.h b/libyara/include/yara/utils.h index 92cb1036..04f607ce 100644 --- a/libyara/include/yara/utils.h +++ b/libyara/include/yara/utils.h @@ -54,21 +54,38 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define EXTERNC #endif -#if defined(__GNUC__) -#define YR_API EXTERNC __attribute__((visibility("default"))) -#elif defined(_MSC_VER) -#define YR_API EXTERNC __declspec(dllexport) + +#if defined(_WIN32) || defined(__CYGWIN__) + #ifdef YR_BUILDING_DLL + #ifdef __GNUC__ + #define YR_API EXTERNC __attribute_((dllexport)) + #define YR_DEPRECATED_API EXTERNC __attribute__((deprecated)) + #else + #define YR_API EXTERNC __declspec(dllexport) + #define YR_DEPRECATED_API EXTERNC __declspec(deprecated) + #endif + #elif defined(YR_IMPORTING_DLL) + #ifdef __GNUC__ + #define YR_API EXTERNC __attribute__((dllimport)) + #define YR_DEPRECATED_API EXTERNC __attribute__((deprecated)) + #else + #define YR_API EXTERNC __declspec(dllimport) + #define YR_DEPRECATED_API EXTERNC __declspec(deprecated) + #endif + #else + #define YR_API EXTERNC + #define YR_DEPRECATED_API EXTERNC + #endif #else -#define YR_API EXTERNC + #if __GNUC__ >= 4 + #define YR_API EXTERNC __attribute__((visibility ("default"))) + #define YR_DEPRECATED_API EXTERNC __attribute__((deprecated)) + #else + #define YR_API EXTERNC + #define YR_DEPRECATED_API EXTERNC + #endif #endif -#if defined(__GNUC__) -#define YR_DEPRECATED_API EXTERNC __attribute__((deprecated)) -#elif defined(_MSC_VER) -#define YR_DEPRECATED_API EXTERNC __declspec(deprecated) -#else -#define YR_DEPRECATED_API EXTERNC -#endif #if defined(__GNUC__) #define YR_ALIGN(n) __attribute__((aligned(n))) diff --git a/windows/vs2015/libyara/libyara.vcxproj b/windows/vs2015/libyara/libyara.vcxproj index 8cb39243..e79180e3 100644 --- a/windows/vs2015/libyara/libyara.vcxproj +++ b/windows/vs2015/libyara/libyara.vcxproj @@ -78,7 +78,7 @@ - _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PROC + _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PROC;YR_BUILDING_STATIC_LIB ..\..\..\libyara;..\..\..\libyara\include;..\..\..;..\packages\YARA.Jansson.x86.1.1.0\include;..\packages\YARA.OpenSSL.x86.1.1.0\include;%(AdditionalIncludeDirectories) 4005;4273;4090 CompileAsCpp @@ -105,7 +105,7 @@ - _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PROC + _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PRO;YR_BUILDING_STATIC_LIBC ..\..\..\libyara;..\..\..\libyara\include;..\..\..;..\packages\YARA.Jansson.x64.1.1.0\include;..\packages\YARA.OpenSSL.x64.1.1.0\include;%(AdditionalIncludeDirectories) 4005;4273;4090 CompileAsCpp @@ -132,7 +132,7 @@ - _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PROC + _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PROC;YR_BUILDING_STATIC_LIB ..\..\..\libyara;..\..\..\libyara\include;..\..\..;..\packages\YARA.Jansson.x86.1.1.0\include;..\packages\YARA.OpenSSL.x86.1.1.0\include;%(AdditionalIncludeDirectories) 4005;4273;4090 CompileAsCpp @@ -157,7 +157,7 @@ - _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PROC + _CRT_SECURE_NO_WARNINGS;CUCKOO_MODULE;HASH_MODULE;DOTNET_MODULE;HAVE_LIBCRYPTO;USE_WINDOWS_PROC;YR_BUILDING_STATIC_LIB ..\..\..\libyara;..\..\..\libyara\include;..\..\..;..\packages\YARA.Jansson.x64.1.1.0\include;..\packages\YARA.OpenSSL.x64.1.1.0\include;%(AdditionalIncludeDirectories) 4005;4273;4090 CompileAsCpp