From 6244c731b918d79e4ab509d253c20ae99b7e5784 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20R=C3=BChsen?= Date: Thu, 19 Apr 2018 10:06:47 +0200 Subject: [PATCH] Extend visibility support Also renamed PSL_PUBLIC -> PSL_API (conforming to other known libraries). --- configure.ac | 3 +++ include/libpsl.h.in | 56 ++++++++++++++++++++++++++------------------- src/Makefile.am | 4 +++- 3 files changed, 38 insertions(+), 25 deletions(-) diff --git a/configure.ac b/configure.ac index 7068fbe..dbc3125 100644 --- a/configure.ac +++ b/configure.ac @@ -17,6 +17,9 @@ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) dnl Check that compiler understands inline AC_C_INLINE +dnl Check for visibility support +gl_VISIBILITY + # # Generate version defines for include file # diff --git a/include/libpsl.h.in b/include/libpsl.h.in index d837a27..f63a790 100644 --- a/include/libpsl.h.in +++ b/include/libpsl.h.in @@ -40,8 +40,16 @@ #define PSL_VERSION_PATCH @LIBPSL_VERSION_PATCH@ #define PSL_VERSION_NUMBER @LIBPSL_VERSION_NUMBER@ -#ifndef PSL_PUBLIC -# define PSL_PUBLIC +#ifndef PSL_API +#if defined BUILDING_PSL && HAVE_VISIBILITY +# define PSL_API __attribute__ ((__visibility__("default"))) +#elif defined BUILDING_PSL && defined _MSC_VER && !defined PSL_STATIC +# define PSL_API __declspec(dllexport) +#elif defined _MSC_VER && !defined PSL_STATIC +# define PSL_API __declspec(dllimport) +#else +# define PSL_API +#endif #endif #ifdef __cplusplus @@ -81,112 +89,112 @@ typedef enum { typedef struct _psl_ctx_st psl_ctx_t; /* frees PSL context */ -PSL_PUBLIC +PSL_API void psl_free(psl_ctx_t *psl); /* frees memory allocated by libpsl routines */ -PSL_PUBLIC +PSL_API void psl_free_string(char *str); /* loads PSL data from file */ -PSL_PUBLIC +PSL_API psl_ctx_t * psl_load_file(const char *fname); /* loads PSL data from FILE pointer */ -PSL_PUBLIC +PSL_API psl_ctx_t * psl_load_fp(FILE *fp); /* retrieves builtin PSL data */ -PSL_PUBLIC +PSL_API const psl_ctx_t * psl_builtin(void); /* retrieves most recent PSL data */ -PSL_PUBLIC +PSL_API psl_ctx_t * psl_latest(const char *fname); /* checks whether domain is a public suffix or not */ -PSL_PUBLIC +PSL_API int psl_is_public_suffix(const psl_ctx_t *psl, const char *domain); /* checks whether domain is a public suffix regarding the type or not */ -PSL_PUBLIC +PSL_API int psl_is_public_suffix2(const psl_ctx_t *psl, const char *domain, int type); /* checks whether cookie_domain is acceptable for domain or not */ -PSL_PUBLIC +PSL_API int psl_is_cookie_domain_acceptable(const psl_ctx_t *psl, const char *hostname, const char *cookie_domain); /* returns the longest not registrable domain within 'domain' or NULL if none found */ -PSL_PUBLIC +PSL_API const char * psl_unregistrable_domain(const psl_ctx_t *psl, const char *domain); /* returns the shortest possible registrable domain part or NULL if domain is not registrable at all */ -PSL_PUBLIC +PSL_API const char * psl_registrable_domain(const psl_ctx_t *psl, const char *domain); /* convert a string into lowercase UTF-8 */ -PSL_PUBLIC +PSL_API psl_error_t psl_str_to_utf8lower(const char *str, const char *encoding, const char *locale, char **lower); /* does not include exceptions */ -PSL_PUBLIC +PSL_API int psl_suffix_count(const psl_ctx_t *psl); /* just counts exceptions */ -PSL_PUBLIC +PSL_API int psl_suffix_exception_count(const psl_ctx_t *psl); /* just counts wildcards */ -PSL_PUBLIC +PSL_API int psl_suffix_wildcard_count(const psl_ctx_t *psl); /* returns mtime of PSL source file */ -PSL_PUBLIC +PSL_API time_t psl_builtin_file_time(void); /* returns SHA1 checksum (hex-encoded, lowercase) of PSL source file */ -PSL_PUBLIC +PSL_API const char * psl_builtin_sha1sum(void); /* returns file name of PSL source file */ -PSL_PUBLIC +PSL_API const char * psl_builtin_filename(void); /* returns name of distribution PSL data file */ -PSL_PUBLIC +PSL_API const char * psl_dist_filename(void); /* returns library version string */ -PSL_PUBLIC +PSL_API const char * psl_get_version(void); /* checks library version number */ -PSL_PUBLIC +PSL_API int psl_check_version_number(int version); /* returns whether the built-in data is outdated or not */ -PSL_PUBLIC +PSL_API int psl_builtin_outdated(void); diff --git a/src/Makefile.am b/src/Makefile.am index b5e3781..e18d754 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -7,7 +7,9 @@ CLEANFILES = suffixes_dafsa.c lib_LTLIBRARIES = libpsl.la libpsl_la_SOURCES = psl.c lookup_string_in_fixed_set.c -libpsl_la_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include -DPSL_DISTFILE=\"$(PSL_DISTFILE)\" +libpsl_la_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include -DPSL_DISTFILE=\"$(PSL_DISTFILE)\" \ + $(CFLAG_VISIBILITY) -DBUILDING_PSL + # include ABI version information libpsl_la_LDFLAGS = -version-info $(LIBPSL_SO_VERSION) if WITH_LIBICU