Skip to content

Commit d29f17b

Browse files
committed
support abi versioning in minor numbers
1 parent 8310f4d commit d29f17b

File tree

4 files changed

+294
-1
lines changed

4 files changed

+294
-1
lines changed

build/autotools/LDVersionScript.m4

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# ld-version-script.m4 serial 3
2+
dnl Copyright (C) 2008-2013 Free Software Foundation, Inc.
3+
dnl This file is free software; the Free Software Foundation
4+
dnl gives unlimited permission to copy and/or distribute it,
5+
dnl with or without modifications, as long as this notice is preserved.
6+
7+
dnl From Simon Josefsson
8+
9+
# FIXME: The test below returns a false positive for mingw
10+
# cross-compiles, 'local:' statements does not reduce number of
11+
# exported symbols in a DLL. Use --disable-ld-version-script to work
12+
# around the problem.
13+
14+
# gl_LD_VERSION_SCRIPT
15+
# --------------------
16+
# Check if LD supports linker scripts, and define automake conditional
17+
# HAVE_LD_VERSION_SCRIPT if so.
18+
AC_DEFUN([gl_LD_VERSION_SCRIPT],
19+
[
20+
AC_ARG_ENABLE([ld-version-script],
21+
AS_HELP_STRING([--enable-ld-version-script],
22+
[enable linker version script (default is enabled when possible)]),
23+
[have_ld_version_script=$enableval], [])
24+
if test -z "$have_ld_version_script"; then
25+
AC_MSG_CHECKING([if LD -Wl,--version-script works])
26+
save_LDFLAGS="$LDFLAGS"
27+
LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
28+
cat > conftest.map <<EOF
29+
foo
30+
EOF
31+
AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
32+
[accepts_syntax_errors=yes], [accepts_syntax_errors=no])
33+
if test "$accepts_syntax_errors" = no; then
34+
cat > conftest.map <<EOF
35+
VERS_1 {
36+
global: sym;
37+
};
38+
39+
VERS_2 {
40+
global: sym;
41+
} VERS_1;
42+
EOF
43+
AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
44+
[have_ld_version_script=yes], [have_ld_version_script=no])
45+
else
46+
have_ld_version_script=no
47+
fi
48+
rm -f conftest.map
49+
LDFLAGS="$save_LDFLAGS"
50+
AC_MSG_RESULT($have_ld_version_script)
51+
fi
52+
AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
53+
])
54+
55+
gl_LD_VERSION_SCRIPT()

build/autotools/versions.ldscript

Lines changed: 232 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
LIBMONGOC_1.0 {
2+
global:
3+
mongoc_bulk_operation_delete;
4+
mongoc_bulk_operation_delete_one;
5+
mongoc_bulk_operation_destroy;
6+
mongoc_bulk_operation_execute;
7+
mongoc_bulk_operation_insert;
8+
mongoc_bulk_operation_new;
9+
mongoc_bulk_operation_remove;
10+
mongoc_bulk_operation_remove_one;
11+
mongoc_bulk_operation_replace_one;
12+
mongoc_bulk_operation_set_client;
13+
mongoc_bulk_operation_set_collection;
14+
mongoc_bulk_operation_set_database;
15+
mongoc_bulk_operation_set_hint;
16+
mongoc_bulk_operation_set_write_concern;
17+
mongoc_bulk_operation_update;
18+
mongoc_bulk_operation_update_one;
19+
mongoc_cleanup;
20+
mongoc_client_command;
21+
mongoc_client_command_simple;
22+
mongoc_client_destroy;
23+
mongoc_client_get_collection;
24+
mongoc_client_get_database;
25+
mongoc_client_get_database_names;
26+
mongoc_client_get_gridfs;
27+
mongoc_client_get_max_bson_size;
28+
mongoc_client_get_max_message_size;
29+
mongoc_client_get_read_prefs;
30+
mongoc_client_get_server_status;
31+
mongoc_client_get_uri;
32+
mongoc_client_get_write_concern;
33+
mongoc_client_new;
34+
mongoc_client_new_from_uri;
35+
mongoc_client_pool_destroy;
36+
mongoc_client_pool_new;
37+
mongoc_client_pool_pop;
38+
mongoc_client_pool_push;
39+
mongoc_client_pool_set_ssl_opts;
40+
mongoc_client_pool_try_pop;
41+
mongoc_client_set_read_prefs;
42+
mongoc_client_set_ssl_opts;
43+
mongoc_client_set_stream_initiator;
44+
mongoc_client_set_write_concern;
45+
mongoc_collection_aggregate;
46+
mongoc_collection_command;
47+
mongoc_collection_command_simple;
48+
mongoc_collection_count;
49+
mongoc_collection_create_bulk_operation;
50+
mongoc_collection_create_index;
51+
mongoc_collection_delete;
52+
mongoc_collection_destroy;
53+
mongoc_collection_drop;
54+
mongoc_collection_drop_index;
55+
mongoc_collection_ensure_index;
56+
mongoc_collection_find;
57+
mongoc_collection_find_and_modify;
58+
mongoc_collection_get_last_error;
59+
mongoc_collection_get_name;
60+
mongoc_collection_get_read_prefs;
61+
mongoc_collection_get_write_concern;
62+
mongoc_collection_insert;
63+
mongoc_collection_insert_bulk;
64+
mongoc_collection_keys_to_index_string;
65+
mongoc_collection_remove;
66+
mongoc_collection_rename;
67+
mongoc_collection_save;
68+
mongoc_collection_set_read_prefs;
69+
mongoc_collection_set_write_concern;
70+
mongoc_collection_stats;
71+
mongoc_collection_update;
72+
mongoc_collection_validate;
73+
mongoc_cursor_clone;
74+
mongoc_cursor_current;
75+
mongoc_cursor_destroy;
76+
mongoc_cursor_error;
77+
mongoc_cursor_get_hint;
78+
mongoc_cursor_get_host;
79+
mongoc_cursor_is_alive;
80+
mongoc_cursor_more;
81+
mongoc_cursor_next;
82+
mongoc_database_add_user;
83+
mongoc_database_command;
84+
mongoc_database_command_simple;
85+
mongoc_database_create_collection;
86+
mongoc_database_destroy;
87+
mongoc_database_drop;
88+
mongoc_database_get_collection;
89+
mongoc_database_get_collection_names;
90+
mongoc_database_get_name;
91+
mongoc_database_get_read_prefs;
92+
mongoc_database_get_write_concern;
93+
mongoc_database_has_collection;
94+
mongoc_database_remove_all_users;
95+
mongoc_database_remove_user;
96+
mongoc_database_set_read_prefs;
97+
mongoc_database_set_write_concern;
98+
mongoc_gridfs_create_file;
99+
mongoc_gridfs_create_file_from_stream;
100+
mongoc_gridfs_destroy;
101+
mongoc_gridfs_drop;
102+
mongoc_gridfs_file_destroy;
103+
mongoc_gridfs_file_error;
104+
mongoc_gridfs_file_get_aliases;
105+
mongoc_gridfs_file_get_chunk_size;
106+
mongoc_gridfs_file_get_content_type;
107+
mongoc_gridfs_file_get_filename;
108+
mongoc_gridfs_file_get_length;
109+
mongoc_gridfs_file_get_md5;
110+
mongoc_gridfs_file_get_metadata;
111+
mongoc_gridfs_file_get_upload_date;
112+
mongoc_gridfs_file_list_destroy;
113+
mongoc_gridfs_file_list_error;
114+
mongoc_gridfs_file_list_next;
115+
mongoc_gridfs_file_readv;
116+
mongoc_gridfs_file_remove;
117+
mongoc_gridfs_file_save;
118+
mongoc_gridfs_file_seek;
119+
mongoc_gridfs_file_set_aliases;
120+
mongoc_gridfs_file_set_content_type;
121+
mongoc_gridfs_file_set_filename;
122+
mongoc_gridfs_file_set_md5;
123+
mongoc_gridfs_file_set_metadata;
124+
mongoc_gridfs_file_tell;
125+
mongoc_gridfs_file_writev;
126+
mongoc_gridfs_find;
127+
mongoc_gridfs_find_one;
128+
mongoc_gridfs_find_one_by_filename;
129+
mongoc_gridfs_get_chunks;
130+
mongoc_gridfs_get_files;
131+
mongoc_gridfs_remove_by_filename;
132+
mongoc_index_opt_get_default;
133+
mongoc_index_opt_init;
134+
mongoc_init;
135+
mongoc_log;
136+
mongoc_log_default_handler;
137+
mongoc_log_level_str;
138+
mongoc_log_set_handler;
139+
mongoc_matcher_destroy;
140+
mongoc_matcher_match;
141+
mongoc_matcher_new;
142+
mongoc_read_prefs_add_tag;
143+
mongoc_read_prefs_copy;
144+
mongoc_read_prefs_destroy;
145+
mongoc_read_prefs_get_mode;
146+
mongoc_read_prefs_get_tags;
147+
mongoc_read_prefs_is_valid;
148+
mongoc_read_prefs_new;
149+
mongoc_read_prefs_set_mode;
150+
mongoc_read_prefs_set_tags;
151+
mongoc_socket_accept;
152+
mongoc_socket_bind;
153+
mongoc_socket_close;
154+
mongoc_socket_connect;
155+
mongoc_socket_destroy;
156+
mongoc_socket_errno;
157+
mongoc_socket_getnameinfo;
158+
mongoc_socket_getsockname;
159+
mongoc_socket_listen;
160+
mongoc_socket_new;
161+
mongoc_socket_recv;
162+
mongoc_socket_send;
163+
mongoc_socket_sendv;
164+
mongoc_socket_setsockopt;
165+
mongoc_ssl_opt_get_default;
166+
mongoc_stream_buffered_new;
167+
mongoc_stream_close;
168+
mongoc_stream_destroy;
169+
mongoc_stream_file_get_fd;
170+
mongoc_stream_file_new;
171+
mongoc_stream_file_new_for_path;
172+
mongoc_stream_flush;
173+
mongoc_stream_get_base_stream;
174+
mongoc_stream_gridfs_new;
175+
mongoc_stream_read;
176+
mongoc_stream_readv;
177+
mongoc_stream_setsockopt;
178+
mongoc_stream_socket_get_socket;
179+
mongoc_stream_socket_new;
180+
mongoc_stream_tls_check_cert;
181+
mongoc_stream_tls_do_handshake;
182+
mongoc_stream_tls_new;
183+
mongoc_stream_writev;
184+
mongoc_uri_copy;
185+
mongoc_uri_destroy;
186+
mongoc_uri_get_auth_mechanism;
187+
mongoc_uri_get_auth_source;
188+
mongoc_uri_get_database;
189+
mongoc_uri_get_hosts;
190+
mongoc_uri_get_options;
191+
mongoc_uri_get_password;
192+
mongoc_uri_get_read_prefs;
193+
mongoc_uri_get_replica_set;
194+
mongoc_uri_get_ssl;
195+
mongoc_uri_get_string;
196+
mongoc_uri_get_username;
197+
mongoc_uri_get_write_concern;
198+
mongoc_uri_new;
199+
mongoc_uri_new_for_host_port;
200+
mongoc_uri_unescape;
201+
mongoc_write_concern_copy;
202+
mongoc_write_concern_destroy;
203+
mongoc_write_concern_get_fsync;
204+
mongoc_write_concern_get_journal;
205+
mongoc_write_concern_get_w;
206+
mongoc_write_concern_get_wmajority;
207+
mongoc_write_concern_get_wtag;
208+
mongoc_write_concern_get_wtimeout;
209+
mongoc_write_concern_new;
210+
mongoc_write_concern_set_fsync;
211+
mongoc_write_concern_set_journal;
212+
mongoc_write_concern_set_w;
213+
mongoc_write_concern_set_wmajority;
214+
mongoc_write_concern_set_wtag;
215+
mongoc_write_concern_set_wtimeout;
216+
local:
217+
*;
218+
};
219+
220+
LIBMONGOC_1.1 {
221+
global:
222+
mongoc_collection_count_with_opts;
223+
mongoc_collection_get_index_info;
224+
mongoc_database_get_collection_info;
225+
mongoc_index_opt_geo_get_default;
226+
mongoc_index_opt_geo_init;
227+
mongoc_rand_seed;
228+
mongoc_rand_add;
229+
mongoc_rand_status;
230+
mongoc_uri_get_credentials;
231+
mongoc_uri_get_mechanism_properties;
232+
} LIBMONGOC_1.0;

configure.ac

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ m4_include([build/autotools/FindDependencies.m4])
3838
m4_include([build/autotools/AutoHarden.m4])
3939
m4_include([build/autotools/MaintainerFlags.m4])
4040
m4_include([build/autotools/Optimizations.m4])
41+
m4_include([build/autotools/LDVersionScript.m4])
4142

4243
# We would put AM_INIT_AUTOMAKE into SetupAutomake.m4, but seems to cause
4344
# autoconf errors.

src/Makefile.am

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,13 @@ libmongoc_1_0_la_LDFLAGS = \
4040
$(MONGOC_LDFLAGS_SHARED) \
4141
$(MONGOC_LT_LDFLAGS) \
4242
-no-undefined \
43-
-export-symbols-regex "^mongoc_" \
4443
-rpath $(libdir)
4544

45+
if HAVE_LD_VERSION_SCRIPT
46+
libmongoc_1_0_la_LDFLAGS += -Wl,--version-script=$(srcdir)/build/autotools/versions.ldscript
47+
else
48+
libmongoc_1_0_la_LDFLAGS += -export-symbols-regex "^mongoc_"
49+
endif
4650

4751
MONGOC_LIBADD_SHARED = \
4852
$(BSON_LIBS) \
@@ -68,5 +72,6 @@ include src/tools/Makefile.am
6872

6973
EXTRA_DIST += \
7074
src/libmongoc.symbols \
75+
build/autotools/versions.ldscript \
7176
src/libmongoc-1.0.pc.in \
7277
src/libmongoc-ssl-1.0.pc.in

0 commit comments

Comments
 (0)