Am Montag 08 Januar 2007 14:03 schrieb Hendrik Sattler:
> This kills DLL creation for windows, though, as not all symbols are
> exported. This means that another patch for this problem will follow, I
> first have to take a look at it.
As promised, I made a patch for API enforcement for windows (means, creating
the lib more correctly). This makes it build again on win32.
While doing that, I found the GCC4 visibility feature and enabled that, too
(practically the same thing).
With this patch, the lib/obex.sym with its usage in lib/Makefile.am can go
away. Visibility does the same but you do not have to maintain two sets.
However, removing it makes it uncleaner when compiling with GCC < 4. Some
embedded people are still using gcc-3.4, thus I left it in.
You need visibility.m4 from gettext (or ask me for it).
HS
PS: both patches should be included before next release!
Index: openobex-anoncvs/include/obex.h
===================================================================
--- openobex-anoncvs.orig/include/obex.h 2007-01-08 17:44:03.801182147 +0100
+++ openobex-anoncvs/include/obex.h 2007-01-08 17:44:31.162892147 +0100
@@ -35,8 +35,11 @@
#ifdef _WIN32
#include <winsock2.h>
+#define LIB_SYMBOL __declspec(dllimport)
+
#else
#include <sys/socket.h>
+#define LIB_SYMBOL
#endif
/* Hum... This would need to be autogenerated from configure,
@@ -61,51 +64,52 @@
/*
* OBEX API
*/
-obex_t *OBEX_Init(int transport, obex_event_t eventcb, unsigned int flags);
-void OBEX_Cleanup(obex_t *self);
-void OBEX_SetUserData(obex_t *self, void * data);
-void * OBEX_GetUserData(obex_t *self);
-void OBEX_SetUserCallBack(obex_t *self, obex_event_t eventcb, void * data);
-int OBEX_SetTransportMTU(obex_t *self, uint16_t mtu_rx, uint16_t mtu_tx_max);
-int OBEX_GetFD(obex_t *self);
-
-int OBEX_RegisterCTransport(obex_t *self, obex_ctrans_t *ctrans);
-void OBEX_SetCustomData(obex_t *self, void * data);
-void * OBEX_GetCustomData(obex_t *self);
-
-int OBEX_TransportConnect(obex_t *self, struct sockaddr *saddr, int addlen);
-int OBEX_TransportDisconnect(obex_t *self);
-int OBEX_CustomDataFeed(obex_t *self, uint8_t *inputbuf, int actual);
-int OBEX_HandleInput(obex_t *self, int timeout);
-
-int OBEX_ServerRegister(obex_t *self, struct sockaddr *saddr, int addrlen);
-obex_t *OBEX_ServerAccept(obex_t *server, obex_event_t eventcb, void * data);
-int OBEX_Request(obex_t *self, obex_object_t *object);
-int OBEX_CancelRequest(obex_t *self, int nice);
-int OBEX_SuspendRequest(obex_t *self, obex_object_t *object);
-int OBEX_ResumeRequest(obex_t *self);
-
-obex_object_t *OBEX_ObjectNew(obex_t *self, uint8_t cmd);
-int OBEX_ObjectDelete(obex_t *self, obex_object_t *object);
-
-int OBEX_ObjectAddHeader(obex_t *self, obex_object_t *object, uint8_t hi,
- obex_headerdata_t hv, uint32_t hv_size, unsigned int flags);
-int OBEX_ObjectGetNextHeader(obex_t *self, obex_object_t *object, uint8_t *hi,
- obex_headerdata_t *hv,
- uint32_t *hv_size);
-int OBEX_ObjectReParseHeaders(obex_t *self, obex_object_t *object);
-int OBEX_ObjectSetRsp(obex_object_t *object, uint8_t rsp, uint8_t lastrsp);
-
-int OBEX_ObjectGetNonHdrData(obex_object_t *object, uint8_t **buffer);
-int OBEX_ObjectSetNonHdrData(obex_object_t *object, const uint8_t *buffer, unsigned int len);
-int OBEX_ObjectSetHdrOffset(obex_object_t *object, unsigned int offset);
-int OBEX_ObjectReadStream(obex_t *self, obex_object_t *object, const uint8_t **buf);
-int OBEX_ObjectGetCommand(obex_t *self, obex_object_t *object);
+LIB_SYMBOL obex_t * OBEX_Init(int transport, obex_event_t eventcb, unsigned int flags);
+LIB_SYMBOL void OBEX_Cleanup(obex_t *self);
+LIB_SYMBOL void OBEX_SetUserData(obex_t *self, void * data);
+LIB_SYMBOL void * OBEX_GetUserData(obex_t *self);
+LIB_SYMBOL void OBEX_SetUserCallBack(obex_t *self, obex_event_t eventcb, void * data);
+LIB_SYMBOL int OBEX_SetTransportMTU(obex_t *self, uint16_t mtu_rx, uint16_t mtu_tx_max);
+LIB_SYMBOL int OBEX_GetFD(obex_t *self);
+
+LIB_SYMBOL int OBEX_RegisterCTransport(obex_t *self, obex_ctrans_t *ctrans);
+LIB_SYMBOL void OBEX_SetCustomData(obex_t *self, void * data);
+LIB_SYMBOL void * OBEX_GetCustomData(obex_t *self);
+
+LIB_SYMBOL int OBEX_TransportConnect(obex_t *self, struct sockaddr *saddr, int addlen);
+LIB_SYMBOL int OBEX_TransportDisconnect(obex_t *self);
+LIB_SYMBOL int OBEX_CustomDataFeed(obex_t *self, uint8_t *inputbuf, int actual);
+LIB_SYMBOL int OBEX_HandleInput(obex_t *self, int timeout);
+
+LIB_SYMBOL int OBEX_ServerRegister(obex_t *self, struct sockaddr *saddr, int addrlen);
+LIB_SYMBOL obex_t * OBEX_ServerAccept(obex_t *server, obex_event_t eventcb, void * data);
+
+LIB_SYMBOL int OBEX_Request(obex_t *self, obex_object_t *object);
+LIB_SYMBOL int OBEX_CancelRequest(obex_t *self, int nice);
+LIB_SYMBOL int OBEX_SuspendRequest(obex_t *self, obex_object_t *object);
+LIB_SYMBOL int OBEX_ResumeRequest(obex_t *self);
+
+LIB_SYMBOL obex_object_t * OBEX_ObjectNew(obex_t *self, uint8_t cmd);
+LIB_SYMBOL int OBEX_ObjectDelete(obex_t *self, obex_object_t *object);
+
+LIB_SYMBOL int OBEX_ObjectAddHeader(obex_t *self, obex_object_t *object,
+ uint8_t hi, obex_headerdata_t hv, uint32_t hv_size,
+ unsigned int flags);
+LIB_SYMBOL int OBEX_ObjectGetNextHeader(obex_t *self, obex_object_t *object,
+ uint8_t *hi, obex_headerdata_t *hv, uint32_t *hv_size);
+LIB_SYMBOL int OBEX_ObjectReParseHeaders(obex_t *self, obex_object_t *object);
+LIB_SYMBOL int OBEX_ObjectSetRsp(obex_object_t *object, uint8_t rsp, uint8_t lastrsp);
+
+LIB_SYMBOL int OBEX_ObjectGetNonHdrData(obex_object_t *object, uint8_t **buffer);
+LIB_SYMBOL int OBEX_ObjectSetNonHdrData(obex_object_t *object, const uint8_t *buffer, unsigned int len);
+LIB_SYMBOL int OBEX_ObjectSetHdrOffset(obex_object_t *object, unsigned int offset);
+LIB_SYMBOL int OBEX_ObjectReadStream(obex_t *self, obex_object_t *object, const uint8_t **buf);
+LIB_SYMBOL int OBEX_ObjectGetCommand(obex_t *self, obex_object_t *object);
-int OBEX_UnicodeToChar(uint8_t *c, const uint8_t *uc, int size);
-int OBEX_CharToUnicode(uint8_t *uc, const uint8_t *c, int size);
+LIB_SYMBOL int OBEX_UnicodeToChar(uint8_t *c, const uint8_t *uc, int size);
+LIB_SYMBOL int OBEX_CharToUnicode(uint8_t *uc, const uint8_t *c, int size);
-char *OBEX_ResponseToString(int rsp);
+LIB_SYMBOL char *OBEX_ResponseToString(int rsp);
/*
* This function is deprecated and will be removed in OpenOBEX 1.1.0
@@ -113,43 +117,43 @@
* Please use the OBEX_ResponseToString instead.
*
*/
-char* OBEX_GetResponseMessage(obex_t *self, int rsp);
+LIB_SYMBOL char* OBEX_GetResponseMessage(obex_t *self, int rsp);
/*
* TcpOBEX API (IPv4/IPv6)
*/
- int TcpOBEX_ServerRegister(obex_t* self, struct sockaddr *addr, int addrlen);
- int TcpOBEX_TransportConnect(obex_t *self, struct sockaddr *addr, int addrlen);
+LIB_SYMBOL int TcpOBEX_ServerRegister(obex_t* self, struct sockaddr *addr, int addrlen);
+LIB_SYMBOL int TcpOBEX_TransportConnect(obex_t *self, struct sockaddr *addr, int addrlen);
/*
* InOBEX API (deprecated)
*/
- int InOBEX_ServerRegister(obex_t *self);
- int InOBEX_TransportConnect(obex_t *self, struct sockaddr *saddr, int addrlen);
+LIB_SYMBOL int InOBEX_ServerRegister(obex_t *self);
+LIB_SYMBOL int InOBEX_TransportConnect(obex_t *self, struct sockaddr *saddr, int addrlen);
/*
* IrOBEX API
*/
- int IrOBEX_ServerRegister(obex_t *self, const char *service);
- int IrOBEX_TransportConnect(obex_t *self, const char *service);
+LIB_SYMBOL int IrOBEX_ServerRegister(obex_t *self, const char *service);
+LIB_SYMBOL int IrOBEX_TransportConnect(obex_t *self, const char *service);
/*
* Bluetooth OBEX API
*/
- int BtOBEX_ServerRegister(obex_t *self, bdaddr_t *src, uint8_t channel);
- int BtOBEX_TransportConnect(obex_t *self, bdaddr_t *src, bdaddr_t *dst, uint8_t channel);
+LIB_SYMBOL int BtOBEX_ServerRegister(obex_t *self, bdaddr_t *src, uint8_t channel);
+LIB_SYMBOL int BtOBEX_TransportConnect(obex_t *self, bdaddr_t *src, bdaddr_t *dst, uint8_t channel);
/*
* OBEX File API
*/
-int FdOBEX_TransportSetup(obex_t *self, int rfd, int wfd, int mtu);
+LIB_SYMBOL int FdOBEX_TransportSetup(obex_t *self, int rfd, int wfd, int mtu);
/*
* OBEX interface discovery API
*/
- int OBEX_FindInterfaces(obex_t *self, obex_interface_t **intf);
- int OBEX_InterfaceConnect(obex_t *self, obex_interface_t *intf);
- void OBEX_FreeInterfaces(obex_t *self);
+LIB_SYMBOL int OBEX_FindInterfaces(obex_t *self, obex_interface_t **intf);
+LIB_SYMBOL int OBEX_InterfaceConnect(obex_t *self, obex_interface_t *intf);
+LIB_SYMBOL void OBEX_FreeInterfaces(obex_t *self);
#ifdef __cplusplus
}
Index: openobex-anoncvs/lib/obex.c
===================================================================
--- openobex-anoncvs.orig/lib/obex.c 2007-01-08 17:44:03.657173147 +0100
+++ openobex-anoncvs/lib/obex.c 2007-01-08 17:44:31.190893897 +0100
@@ -40,11 +40,21 @@
#ifdef _WIN32
#include <winsock2.h>
#define ESOCKTNOSUPPORT 1
-#else /* _WIN32 */
+#ifdef DLL_EXPORT
+#define LIB_SYMBOL __declspec(dllexport)
+#endif
+#else /* _WIN32 */
#include <fcntl.h>
#include <signal.h>
#include <unistd.h>
+#ifdef HAVE_VISIBILITY
+#define LIB_SYMBOL __attribute__ ((visibility("default")))
+#endif
+#endif
+
+#ifndef LIB_SYMBOL
+#define LIB_SYMBOL
#endif
#include "obex_main.h"
@@ -90,6 +100,7 @@
*
* Returns an OBEX handle or %NULL on error.
*/
+LIB_SYMBOL
obex_t *OBEX_Init(int transport, obex_event_t eventcb, unsigned int flags)
{
obex_t *self;
@@ -182,6 +193,7 @@
* Call this function directly after OBEX_Init if you are using
* a custom transport.
*/
+LIB_SYMBOL
int OBEX_RegisterCTransport(obex_t *self, obex_ctrans_t *ctrans)
{
obex_return_val_if_fail(self != NULL, -1);
@@ -197,6 +209,7 @@
*
* Close down an OBEX instance.
*/
+LIB_SYMBOL
void OBEX_Cleanup(obex_t *self)
{
obex_return_if_fail(self != NULL);
@@ -220,6 +233,7 @@
* @self: OBEX handle
* @data: It's all up to you!
*/
+LIB_SYMBOL
void OBEX_SetUserData(obex_t *self, void * data)
{
obex_return_if_fail(self != NULL);
@@ -232,6 +246,7 @@
*
* Returns userdata
*/
+LIB_SYMBOL
void * OBEX_GetUserData(obex_t *self)
{
obex_return_val_if_fail(self != NULL, 0);
@@ -244,6 +259,7 @@
* @eventcb: Function pointer to your new event callback.
* @data: Pointer to the new user data to pass to the new callback (optional)
*/
+LIB_SYMBOL
void OBEX_SetUserCallBack(obex_t *self, obex_event_t eventcb, void * data)
{
obex_return_if_fail(self != NULL);
@@ -269,6 +285,7 @@
*
* Returns -1 on error.
*/
+LIB_SYMBOL
int OBEX_SetTransportMTU(obex_t *self, uint16_t mtu_rx, uint16_t mtu_tx_max)
{
obex_return_val_if_fail(self != NULL, -EFAULT);
@@ -311,6 +328,7 @@
*
* Returns -1 on error.
*/
+LIB_SYMBOL
int OBEX_ServerRegister(obex_t *self, struct sockaddr *saddr, int addrlen)
{
DEBUG(3, "\n");
@@ -343,6 +361,7 @@
*
* Returns the client instance or %NULL for error.
*/
+LIB_SYMBOL
obex_t *OBEX_ServerAccept(obex_t *server, obex_event_t eventcb, void * data)
{
obex_t *self;
@@ -431,6 +450,7 @@
* Like select() this function returns -1 on error, 0 on timeout or
* positive on success.
*/
+LIB_SYMBOL
int OBEX_HandleInput(obex_t *self, int timeout)
{
DEBUG(4, "\n");
@@ -445,6 +465,7 @@
* @inputbuf: Pointer to custom data
* @actual: Length of buffer
*/
+LIB_SYMBOL
int OBEX_CustomDataFeed(obex_t *self, uint8_t *inputbuf, int actual)
{
DEBUG(3, "\n");
@@ -464,6 +485,7 @@
*
* Returns -1 on error.
*/
+LIB_SYMBOL
int OBEX_TransportConnect(obex_t *self, struct sockaddr *saddr, int addrlen)
{
DEBUG(4, "\n");
@@ -481,6 +503,7 @@
* OBEX_TransportDisconnect - Disconnect transport
* @self: OBEX handle
*/
+LIB_SYMBOL
int OBEX_TransportDisconnect(obex_t *self)
{
DEBUG(4, "\n");
@@ -508,6 +531,7 @@
* This mean that after receiving an incomming connection, you need to
* call this function again.
*/
+LIB_SYMBOL
int OBEX_GetFD(obex_t *self)
{
obex_return_val_if_fail(self != NULL, -1);
@@ -523,6 +547,7 @@
*
* Returns negative on error.
*/
+LIB_SYMBOL
int OBEX_Request(obex_t *self, obex_object_t *object)
{
DEBUG(4, "\n");
@@ -551,6 +576,7 @@
*
*
*/
+LIB_SYMBOL
int OBEX_CancelRequest(obex_t *self, int nice)
{
obex_return_val_if_fail(self != NULL, -1);
@@ -562,6 +588,7 @@
* @self: OBEX handle
* @object: object to suspend (NULL to suspend currently transfered object)
*/
+LIB_SYMBOL
int OBEX_SuspendRequest(obex_t *self, obex_object_t *object)
{
obex_return_val_if_fail(object != NULL || self->object != NULL, -1);
@@ -572,6 +599,7 @@
* OBEX_ResumeRequest - Resume transfer of an object
* @self: OBEX handle
*/
+LIB_SYMBOL
int OBEX_ResumeRequest(obex_t *self)
{
obex_return_val_if_fail(self->object != NULL, -1);
@@ -585,6 +613,7 @@
*
* Returns a pointer to a new OBEX Object or %NULL on error.
*/
+LIB_SYMBOL
obex_object_t *OBEX_ObjectNew(obex_t *self, uint8_t cmd)
{
obex_object_t *object;
@@ -615,6 +644,7 @@
* Note that as soon as you have passed an object to the lib using
* OBEX_Request(), you shall not delete it yourself.
*/
+LIB_SYMBOL
int OBEX_ObjectDelete(obex_t *self, obex_object_t *object)
{
obex_return_val_if_fail(object != NULL, -1);
@@ -651,6 +681,7 @@
*
* The headers will be sent in the order you add them.
*/
+LIB_SYMBOL
int OBEX_ObjectAddHeader(obex_t *self, obex_object_t *object, uint8_t hi,
obex_headerdata_t hv, uint32_t hv_size,
unsigned int flags)
@@ -675,6 +706,7 @@
*
* You will get the headers in the received order.
*/
+LIB_SYMBOL
int OBEX_ObjectGetNextHeader(obex_t *self, obex_object_t *object, uint8_t *hi,
obex_headerdata_t *hv,
uint32_t *hv_size)
@@ -697,6 +729,7 @@
* Returns 1 on success
* Returns 0 if failed due previous parsing not completed.
*/
+LIB_SYMBOL
int OBEX_ObjectReParseHeaders(obex_t *self, obex_object_t *object)
{
obex_return_val_if_fail(self != NULL, -1);
@@ -722,6 +755,7 @@
*
* Returns the number of bytes in buffer, or 0 for end-of-stream.
*/
+LIB_SYMBOL
int OBEX_ObjectReadStream(obex_t *self, obex_object_t *object, const uint8_t **buf)
{
obex_return_val_if_fail(self != NULL, -1);
@@ -739,6 +773,7 @@
*
* Returns -1 on error.
*/
+LIB_SYMBOL
int OBEX_ObjectSetRsp(obex_object_t *object, uint8_t rsp, uint8_t lastrsp)
{
obex_return_val_if_fail(object != NULL, -1);
@@ -752,6 +787,7 @@
*
* Returns the size of the buffer or -1 for error.
*/
+LIB_SYMBOL
int OBEX_ObjectGetNonHdrData(obex_object_t *object, uint8_t **buffer)
{
obex_return_val_if_fail(object != NULL, -1);
@@ -771,6 +807,7 @@
* Some commands (notably SetPath) send data before headers. Use this
* function to set this data.
*/
+LIB_SYMBOL
int OBEX_ObjectSetNonHdrData(obex_object_t *object, const uint8_t *buffer, unsigned int len)
{
//TODO: Check that we actually can send len bytes without violating MTU
@@ -798,6 +835,7 @@
* command has data before the headers comes. You do NOT need to use this
* function on Connect and SetPath, they are handled automatically.
*/
+LIB_SYMBOL
int OBEX_ObjectSetHdrOffset(obex_object_t *object, unsigned int offset)
{
obex_return_val_if_fail(object != NULL, -1);
@@ -812,6 +850,7 @@
*
* Call this function to get the OBEX command of an object.
*/
+LIB_SYMBOL
int OBEX_ObjectGetCommand(obex_t *self, obex_object_t *object)
{
obex_return_val_if_fail(object != NULL || self->object != NULL, -1);
@@ -830,6 +869,7 @@
*
* Buffers may not overlap. Returns -1 on error.
*/
+LIB_SYMBOL
int OBEX_UnicodeToChar(uint8_t *c, const uint8_t *uc, int size)
{
int n;
@@ -857,6 +897,7 @@
*
* Buffers may not overlap. Returns -1 on error.
*/
+LIB_SYMBOL
int OBEX_CharToUnicode(uint8_t *uc, const uint8_t *c, int size)
{
int len, n;
@@ -885,6 +926,7 @@
*
* The returned char must not be freed. Returns %NULL on error.
*/
+LIB_SYMBOL
char *OBEX_ResponseToString(int rsp)
{
DEBUG(4, "\n");
@@ -899,6 +941,7 @@
*
* The returned char must not be freed. Returns %NULL on error.
*/
+LIB_SYMBOL
char* OBEX_GetResponseMessage(obex_t *self, int rsp)
{
DEBUG(4, "\n");
@@ -922,6 +965,7 @@
* multiple connections transparently (i.e. without a lookup table).
* - Jean II
*/
+LIB_SYMBOL
void OBEX_SetCustomData(obex_t *self, void * data)
{
obex_return_if_fail(self != NULL);
@@ -934,6 +978,7 @@
*
* Returns Custom Transport data
*/
+LIB_SYMBOL
void * OBEX_GetCustomData(obex_t *self)
{
obex_return_val_if_fail(self != NULL, 0);
@@ -951,6 +996,7 @@
*
* Returns -1 on error.
*/
+LIB_SYMBOL
int TcpOBEX_ServerRegister(obex_t* self, struct sockaddr *addr, int addrlen)
{
DEBUG(3, "\n");
@@ -973,6 +1019,7 @@
*
* Returns -1 on error.
*/
+LIB_SYMBOL
int TcpOBEX_TransportConnect(obex_t *self, struct sockaddr *addr, int addrlen)
{
DEBUG(4, "\n");
@@ -999,6 +1046,7 @@
*
* Returns -1 on error.
*/
+LIB_SYMBOL
int InOBEX_ServerRegister(obex_t *self)
{
DEBUG(3, "\n");
@@ -1017,6 +1065,7 @@
*
* Returns -1 on error.
*/
+LIB_SYMBOL
int InOBEX_TransportConnect(obex_t *self, struct sockaddr *saddr, int addrlen)
{
DEBUG(4, "\n");
@@ -1045,6 +1094,7 @@
*
* Returns -1 on error.
*/
+LIB_SYMBOL
int IrOBEX_ServerRegister(obex_t *self, const char *service)
{
DEBUG(3, "\n");
@@ -1067,6 +1117,7 @@
*
* An easier connect function to use for IrDA (IrOBEX) only.
*/
+LIB_SYMBOL
int IrOBEX_TransportConnect(obex_t *self, const char *service)
{
DEBUG(4, "\n");
@@ -1096,6 +1147,7 @@
*
* Returns -1 on error.
*/
+LIB_SYMBOL
int BtOBEX_ServerRegister(obex_t *self, bdaddr_t *src, uint8_t channel)
{
DEBUG(3, "\n");
@@ -1119,6 +1171,7 @@
*
* An easier connect function to use for Bluetooth (Bluetooth OBEX) only.
*/
+LIB_SYMBOL
int BtOBEX_TransportConnect(obex_t *self, bdaddr_t *src, bdaddr_t *dst, uint8_t channel)
{
DEBUG(4, "\n");
@@ -1150,6 +1203,7 @@
* @wfd: descriptor to write
* @mtu: transport mtu: 0 - default
*/
+LIB_SYMBOL
int FdOBEX_TransportSetup(obex_t *self, int rfd, int wfd, int mtu)
{
DEBUG(4, "\n");
@@ -1174,6 +1228,7 @@
* An easier connect function to connect to a discovered interface (currently
* USB OBEX only).
*/
+LIB_SYMBOL
int OBEX_InterfaceConnect(obex_t *self, obex_interface_t *intf)
{
DEBUG(4, "\n");
@@ -1207,6 +1262,7 @@
*
* Gets a list of OBEX interfaces, or NULL if there are none.
*/
+LIB_SYMBOL
int OBEX_FindInterfaces(obex_t *self, obex_interface_t **interfaces)
{
DEBUG(4, "\n");
@@ -1235,6 +1291,7 @@
* Frees memory allocated to OBEX interface structures after it has been
* allocated by OBEX_FindInterfaces.
*/
+LIB_SYMBOL
void OBEX_FreeInterfaces(obex_t *self)
{
DEBUG(4, "\n");
Index: openobex-anoncvs/configure.in
===================================================================
--- openobex-anoncvs.orig/configure.in 2007-01-08 17:44:03.873186647 +0100
+++ openobex-anoncvs/configure.in 2007-01-08 17:44:31.214895397 +0100
@@ -21,6 +21,7 @@
AC_PROG_LIBTOOL
+gl_VISIBILITY
AC_CANONICAL_HOST
AC_PATH_WIN32
Index: openobex-anoncvs/lib/Makefile.am
===================================================================
--- openobex-anoncvs.orig/lib/Makefile.am 2007-01-08 17:44:23.754429147 +0100
+++ openobex-anoncvs/lib/Makefile.am 2007-01-08 17:44:31.242897147 +0100
@@ -17,6 +17,8 @@
irda.h irda_wrap.h \
usbobex.c usbobex.h
+libopenobex_la_CFLAGS = @CFLAG_VISIBILITY@
+
libopenobex_la_LDFLAGS = \
-no-undefined \
-version-info 4:0:3 \
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Openobex-users mailing list
[email protected]
http://lists.sourceforge.net/lists/listinfo/openobex-users