You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							118 lines
						
					
					
						
							3.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							118 lines
						
					
					
						
							3.5 KiB
						
					
					
				| dnl Check for the __declspec(dllexport) construct support. | |
| 
 | |
| AC_DEFUN([AX_DECLSPEC], | |
| [ | |
| AH_TEMPLATE($1[]_IMPORT, | |
|   [Defined if the compiler understands __declspec(dllimport) | |
|    or __attribute__((visibility("default"))) or __global construct.]) | |
| AH_TEMPLATE($1[]_EXPORT, | |
|   [Defined if the compiler understands __declspec(dllimport) | |
|    or __attribute__((visibility("default"))) or __global construct.]) | |
| AH_TEMPLATE($1[]_PRIVATE, | |
|   [Defined if the compiler understands __attribute__((visibility("hidden"))) | |
|    or __hidden construct.]) | |
| 
 | |
| AS_VAR_SET([continue_checks], [1]) | |
| 
 | |
| dnl This is for Solaris platforms with Solaris Studio. | |
| 
 | |
| AC_CACHE_CHECK([for __global and __hidden], [ac_cv__global], | |
| [ | |
|   AC_COMPILE_IFELSE( | |
|     [AC_LANG_PROGRAM( | |
|       [[ | |
|         __global int x = 0; | |
|         __global int foo (); | |
|         int foo () { return 0; } | |
|         __global int bar () { return x; } | |
|         __hidden int baz () { return 1; } | |
|       ]], | |
|       [[]])], | |
|     [ac_cv__global=yes], | |
|     [ac_cv__global=no]) | |
| ]) | |
| 
 | |
| AS_IF([test "x$ac_cv__global" = "xyes"], | |
|   [AC_DEFINE($1[]_IMPORT, [__global]) | |
|    AC_DEFINE($1[]_EXPORT, [__global]) | |
|    AC_DEFINE($1[]_PRIVATE, [__hidden]) | |
|    AS_UNSET([continue_checks])]) | |
| 
 | |
| dnl This typically succeeds on Windows/MinGW/Cygwin. | |
| 
 | |
| AS_VAR_SET_IF([continue_checks], | |
| [ | |
| AC_CACHE_CHECK([for __declspec(dllexport) and __declspec(dllimport)], | |
|   [ac_cv_declspec], | |
| [ | |
|   AC_COMPILE_IFELSE( | |
|     [AC_LANG_PROGRAM( | |
|       [[ | |
| #if defined (__clang__) | |
| // Here the problem is that Clang only warns that it does not support | |
| // __declspec(dllexport) but still compiles the executable. | |
| #  error Please fail. | |
| And extra please fail. | |
| #else | |
|         __declspec(dllexport) int x = 0; | |
|         __declspec(dllexport) int foo (); | |
|         int foo () { return 0; } | |
|         __declspec(dllexport) int bar () { return x; } | |
| #endif | |
|       ]], | |
|       [[]])], | |
|     [ac_cv_declspec=yes], | |
|     [ac_cv_declspec=no]) | |
| ]) | |
| 
 | |
| AS_IF([test "x$ac_cv_declspec" = "xyes"], | |
|   [AC_DEFINE($1[]_IMPORT, [__declspec(dllimport)]) | |
|    AC_DEFINE($1[]_EXPORT, [__declspec(dllexport)]) | |
|    AC_DEFINE($1[]_PRIVATE, [/* empty */]) | |
|    AS_UNSET([continue_checks])]) | |
| ]) | |
| 
 | |
| dnl This typically succeeds on *NIX platforms with GCC or Clang. | |
| 
 | |
| AS_VAR_SET_IF([continue_checks], | |
| [ | |
| AC_CACHE_CHECK([for __attribute__((visibility("default")))dnl | |
|  and __attribute__((visibility("hidden")))], [ac_cv__attribute__visibility], | |
| [ | |
|   AC_COMPILE_IFELSE( | |
|     [AC_LANG_PROGRAM( | |
|       [[ | |
| #if defined (__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ <= 1)) | |
| #  error Please fail. | |
| And extra please fail. | |
| #else | |
|         __attribute__((visibility("default"))) int x = 0; | |
|         __attribute__((visibility("default"))) int foo (); | |
|         int foo () { return 0; } | |
|         __attribute__((visibility("default"))) int bar () { return x; } | |
|         __attribute__((visibility("hidden"))) int baz () { return 1; } | |
| #endif | |
|       ]], | |
|       [[]])], | |
|     [ac_cv__attribute__visibility=yes], | |
|     [ac_cv__attribute__visibility=no]) | |
| ]) | |
| 
 | |
| AS_IF([test "x$ac_cv__attribute__visibility" = "xyes"], | |
|   [AC_DEFINE($1[]_IMPORT, [__attribute__ ((visibility("default")))]) | |
|    AC_DEFINE($1[]_EXPORT, [__attribute__ ((visibility("default")))]) | |
|    AC_DEFINE($1[]_PRIVATE, [__attribute__ ((visibility("hidden")))]) | |
|    AS_UNSET([continue_checks])]) | |
| ]) | |
| 
 | |
| 
 | |
| AS_IF([test "x$ac_cv__attribute__visibility" = "xno" dnl | |
|        && test "x$ac_cv_declspec" = "xno" dnl | |
|        && test "x$ax_cv__global" = "xno"], | |
|   [AC_DEFINE($1[]_IMPORT, [/* empty */]) | |
|    AC_DEFINE($1[]_EXPORT, [/* empty */]) | |
|    AC_DEFINE($1[]_PRIVATE, [/* empty */])]) | |
| 
 | |
| AS_UNSET([continue_checks]) | |
| 
 | |
| ]) dnl AX_DECLSPEC
 |