summaryrefslogtreecommitdiff
path: root/lib/relocatable.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/relocatable.h')
-rw-r--r--lib/relocatable.h34
1 files changed, 26 insertions, 8 deletions
diff --git a/lib/relocatable.h b/lib/relocatable.h
index 49452fe7..162f9d82 100644
--- a/lib/relocatable.h
+++ b/lib/relocatable.h
@@ -1,5 +1,5 @@
/* Provide relocatable packages.
- Copyright (C) 2003, 2005, 2008-2022 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2005, 2008-2024 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2003.
This file is free software: you can redistribute it and/or modify
@@ -18,6 +18,11 @@
#ifndef _RELOCATABLE_H
#define _RELOCATABLE_H
+/* This file uses _GL_ATTRIBUTE_MALLOC, HAVE_VISIBILITY. */
+#if !_GL_CONFIG_H_INCLUDED
+ #error "Please include config.h first."
+#endif
+
#include <stdlib.h>
#ifdef __cplusplus
@@ -28,15 +33,28 @@ extern "C" {
/* This can be enabled through the configure --enable-relocatable option. */
#if ENABLE_RELOCATABLE
-/* When building a DLL, we must export some functions. Note that because
- this is a private .h file, we don't need to use __declspec(dllimport)
- in any case. */
+/* When building a shared library, we must export some functions.
+ Note that because this is a private .h file, we don't need to use
+ __declspec(dllimport) in any case. */
#if HAVE_VISIBILITY && BUILDING_DLL
-# define RELOCATABLE_DLL_EXPORTED __attribute__((__visibility__("default")))
+# define RELOCATABLE_SHLIB_EXPORTED __attribute__((__visibility__("default")))
#elif defined _MSC_VER && BUILDING_DLL
-# define RELOCATABLE_DLL_EXPORTED __declspec(dllexport)
+/* When building with MSVC, exporting a symbol means that the object file
+ contains a "linker directive" of the form /EXPORT:symbol. This can be
+ inspected through the "objdump -s --section=.drectve FILE" or
+ "dumpbin /directives FILE" commands.
+ The symbols from this file should be exported if and only if the object
+ file gets included in a DLL. Libtool, on Windows platforms, defines
+ the C macro DLL_EXPORT (together with PIC) when compiling for a shared
+ library (called DLL under Windows) and does not define it when compiling
+ an object file meant to be linked statically into some executable. */
+# if defined DLL_EXPORT
+# define RELOCATABLE_SHLIB_EXPORTED __declspec(dllexport)
+# else
+# define RELOCATABLE_SHLIB_EXPORTED
+# endif
#else
-# define RELOCATABLE_DLL_EXPORTED
+# define RELOCATABLE_SHLIB_EXPORTED
#endif
/* Sets the original and the current installation prefix of the package.
@@ -44,7 +62,7 @@ extern "C" {
by the corresponding pathname with the current prefix instead. Both
prefixes should be directory names without trailing slash (i.e. use ""
instead of "/"). */
-extern RELOCATABLE_DLL_EXPORTED void
+extern RELOCATABLE_SHLIB_EXPORTED void
set_relocation_prefix (const char *orig_prefix,
const char *curr_prefix);