--- pacman-lib-orig/lib/libalpm/Makefile.am	2007-01-25 21:13:16.000000000 -0500
+++ pacman-lib/lib/libalpm/Makefile.am	2007-01-26 22:25:15.000000000 -0500
@@ -2,7 +2,7 @@
 DEFINES = -pedantic -D_GNU_SOURCE
 #libalpm isn't fully C99 safe with the strict aliasing rules
 # to be fixed in the future
-AM_CFLAGS = $(DEFINES) -fno-strict-aliasing
+AM_CFLAGS = $(DEFINES) -fno-strict-aliasing -fvisibility=hidden
 SUBDIRS = po
 
 localedir = $(datadir)/locale
--- pacman-lib-orig/lib/libalpm/add.c	2007-01-23 22:02:53.000000000 -0500
+++ pacman-lib/lib/libalpm/add.c	2007-01-26 22:25:21.000000000 -0500
@@ -105,7 +105,7 @@
 	return(0);
 }
 
-int _alpm_add_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)
+int SYMHIDDEN _alpm_add_loadtarget(pmtrans_t *trans, pmdb_t *db, char *name)
 {
 	pmpkg_t *info = NULL;
 	pmpkg_t *dummy;
--- pacman-lib-orig/lib/libalpm/alpm.c	2007-01-25 21:13:16.000000000 -0500
+++ pacman-lib/lib/libalpm/alpm.c	2007-01-26 23:17:47.000000000 -0500
@@ -63,7 +63,7 @@
 
 /* Globals */
 pmhandle_t *handle = NULL;
-enum _pmerrno_t pm_errno;
+enum _pmerrno_t pm_errno SYMEXPORT;
 
 /** \addtogroup alpm_interface Interface Functions
  * @brief Functions to initialize and release libalpm
@@ -75,7 +75,7 @@
  * @param root the full path of the root we'll be installing to (usually /)
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_initialize(const char *root)
+int SYMEXPORT alpm_initialize(const char *root)
 {
 	char str[PATH_MAX];
 
@@ -99,7 +99,7 @@
 /** Release the library.  This should be the last alpm call you make.
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_release()
+int SYMEXPORT alpm_release()
 {
 	int dbs_left = 0;
 
@@ -139,7 +139,7 @@
  * @param treename the name of the repository
  * @return a pmdb_t* on success (the value), NULL on error
  */
-pmdb_t *alpm_db_register(char *treename)
+pmdb_t SYMEXPORT *alpm_db_register(char *treename)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, NULL));
@@ -245,7 +245,7 @@
  * @return 0 on success, > 0 on error (pm_errno is set accordingly), < 0 if up
  * to date
  */
-int alpm_db_update(int force, pmdb_t *db)
+int SYMEXPORT alpm_db_update(int force, pmdb_t *db)
 {
 	alpm_list_t *lp;
 	char path[PATH_MAX];
@@ -330,7 +330,7 @@
  * @param name of the package
  * @return the package entry on success, NULL on error
  */
-pmpkg_t *alpm_db_readpkg(pmdb_t *db, char *name)
+pmpkg_t SYMEXPORT *alpm_db_readpkg(pmdb_t *db, char *name)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -344,7 +344,7 @@
  * @param db pointer to the package database to get the package from
  * @return the list of packages on success, NULL on error
  */
-alpm_list_t *alpm_db_getpkgcache(pmdb_t *db)
+alpm_list_t SYMEXPORT *alpm_db_getpkgcache(pmdb_t *db)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -358,7 +358,7 @@
  * @param name name of the package
  * @return the list of packages on success, NULL on error
  */
-alpm_list_t *alpm_db_whatprovides(pmdb_t *db, char *name)
+alpm_list_t SYMEXPORT *alpm_db_whatprovides(pmdb_t *db, char *name)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -373,7 +373,7 @@
  * @param name of the group
  * @return the groups entry on success, NULL on error
  */
-pmgrp_t *alpm_db_readgrp(pmdb_t *db, char *name)
+pmgrp_t SYMEXPORT *alpm_db_readgrp(pmdb_t *db, char *name)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -387,7 +387,7 @@
  * @param db pointer to the package database to get the group from
  * @return the list of groups on success, NULL on error
  */
-alpm_list_t *alpm_db_getgrpcache(pmdb_t *db)
+alpm_list_t SYMEXPORT *alpm_db_getgrpcache(pmdb_t *db)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -408,7 +408,7 @@
  * @param pkg address of the package pointer
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_pkg_load(char *filename, pmpkg_t **pkg)
+int SYMEXPORT alpm_pkg_load(char *filename, pmpkg_t **pkg)
 {
 	_alpm_log(PM_LOG_FUNCTION, "enter alpm_pkg_load");
 
@@ -429,7 +429,7 @@
  * @param pkg package pointer to free
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_pkg_free(pmpkg_t *pkg)
+int SYMEXPORT alpm_pkg_free(pmpkg_t *pkg)
 {
 	_alpm_log(PM_LOG_FUNCTION, "enter alpm_pkg_free");
 
@@ -543,7 +543,7 @@
  * @return postive, 0 or negative if ver1 is less, equal or more
  * than ver2, respectively.
  */
-int alpm_pkg_vercmp(const char *ver1, const char *ver2)
+int SYMEXPORT alpm_pkg_vercmp(const char *ver1, const char *ver2)
 {
 	return(_alpm_versioncmp(ver1, ver2));
 }
@@ -556,7 +556,7 @@
 	"x86_64",
 };
 
-char *alpm_pkg_name_hasarch(char *pkgname)
+char SYMEXPORT *alpm_pkg_name_hasarch(char *pkgname)
 {
 	/* TODO remove this when we transfer everything over to -ARCH
 	 *
@@ -596,7 +596,7 @@
  * @param db pointer to the package database to search in
  * @return the list of packages on success, NULL on error
  */
-alpm_list_t *alpm_db_search(pmdb_t *db)
+alpm_list_t SYMEXPORT *alpm_db_search(pmdb_t *db)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -622,7 +622,7 @@
  * @param progress progress callback function pointer
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_trans_init(pmtranstype_t type, unsigned int flags,
+int SYMEXPORT alpm_trans_init(pmtranstype_t type, unsigned int flags,
                     alpm_trans_cb_event event, alpm_trans_cb_conv conv,
                     alpm_trans_cb_progress progress)
 {
@@ -651,7 +651,7 @@
 /** Search for packages to upgrade and add them to the transaction.
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_trans_sysupgrade()
+int SYMEXPORT alpm_trans_sysupgrade()
 {
 	pmtrans_t *trans;
 
@@ -669,7 +669,7 @@
  * @param target the name of the target to add
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_trans_addtarget(char *target)
+int SYMEXPORT alpm_trans_addtarget(char *target)
 {
 	pmtrans_t *trans;
 
@@ -689,7 +689,7 @@
  * of an error can be dumped (ie. list of conflicting files)
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_trans_prepare(alpm_list_t **data)
+int SYMEXPORT alpm_trans_prepare(alpm_list_t **data)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));
@@ -706,7 +706,7 @@
  * of an error can be dumped (ie. list of conflicting files)
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_trans_commit(alpm_list_t **data)
+int SYMEXPORT alpm_trans_commit(alpm_list_t **data)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, RET_ERR(PM_ERR_HANDLE_NULL, -1));
@@ -726,7 +726,7 @@
 /** Release a transaction.
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_trans_release()
+int SYMEXPORT alpm_trans_release()
 {
 	pmtrans_t *trans;
 	char path[PATH_MAX];
@@ -774,7 +774,7 @@
  * @param fmt output format
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_logaction(char *fmt, ...)
+int SYMEXPORT alpm_logaction(char *fmt, ...)
 {
 	char str[LOG_STR_LEN];
 	va_list args;
@@ -812,7 +812,7 @@
  * @param name name of the file
  * @return the checksum on success, NULL on error
  */
-char *alpm_get_md5sum(char *name)
+char SYMEXPORT *alpm_get_md5sum(char *name)
 {
 	ASSERT(name != NULL, return(NULL));
 
@@ -823,7 +823,7 @@
  * @param name name of the file
  * @return the checksum on success, NULL on error
  */
-char *alpm_get_sha1sum(char *name)
+char SYMEXPORT *alpm_get_sha1sum(char *name)
 {
 	ASSERT(name != NULL, return(NULL));
 
@@ -834,7 +834,7 @@
  * @param url
  * @return the downloaded filename on success, NULL on error
  */
-char *alpm_fetch_pkgurl(char *url)
+char SYMEXPORT *alpm_fetch_pkgurl(char *url)
 {
 	ASSERT(strstr(url, "://"), return(NULL));
 
@@ -847,7 +847,7 @@
  * @param this_section the config current section being parsed
  * @return 0 on success, -1 on error (pm_errno is set accordingly)
  */
-int alpm_parse_config(char *file, alpm_cb_db_register callback, const char *this_section)
+int SYMEXPORT alpm_parse_config(char *file, alpm_cb_db_register callback, const char *this_section)
 {
 	FILE *fp = NULL;
 	char line[PATH_MAX+1];
--- pacman-lib-orig/lib/libalpm/alpm_list.c	2007-01-24 03:51:51.000000000 -0500
+++ pacman-lib/lib/libalpm/alpm_list.c	2007-01-26 23:19:02.000000000 -0500
@@ -52,7 +52,7 @@
 /** Free a list, but not the contained data
  *  @param list the list to free
  */
-void alpm_list_free(alpm_list_t *list)
+void SYMEXPORT alpm_list_free(alpm_list_t *list)
 {
 	alpm_list_t *it = list;
 
@@ -67,7 +67,7 @@
  *  @param list the list to free
  *  @param fn a free function for the internal data
  */
-void alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn)
+void SYMEXPORT alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn)
 {
 	alpm_list_t *it = list;
 
@@ -87,7 +87,7 @@
  *  @param data the new item to be added to the list
  *  @return the resultant list, or NULL on failure
  */
-alpm_list_t *alpm_list_add(alpm_list_t *list, void *data)
+alpm_list_t SYMEXPORT *alpm_list_add(alpm_list_t *list, void *data)
 {
 	alpm_list_t *ptr, *lp;
 
@@ -305,7 +305,7 @@
  *  @param list the list to copy
  *  @return a NEW list containing non-duplicated items
  */
-alpm_list_t *alpm_list_remove_dupes(alpm_list_t *list)
+alpm_list_t SYMEXPORT *alpm_list_remove_dupes(alpm_list_t *list)
 { /* TODO does removing the strdup here cause invalid free's anywhere? */
 	alpm_list_t *lp = list, *newlist = NULL;
 	while(lp) {
@@ -354,7 +354,7 @@
  * @param list the list
  * @return the first element in the list
  */
-alpm_list_t *alpm_list_first(alpm_list_t *list)
+alpm_list_t SYMEXPORT *alpm_list_first(alpm_list_t *list)
 {
 	return(list);
 }
@@ -377,7 +377,7 @@
  * @param entry the list entry
  * @return the next element, or NULL when no more elements exist
  */
-alpm_list_t *alpm_list_next(alpm_list_t *entry)
+alpm_list_t SYMEXPORT *alpm_list_next(alpm_list_t *entry)
 {
 	return(entry->next);
 }
@@ -398,7 +398,7 @@
  * @param entry the list entry
  * @return the contained data, or NULL if none
  */
-void *alpm_list_getdata(const alpm_list_t *entry)
+void SYMEXPORT *alpm_list_getdata(const alpm_list_t *entry)
 {
 	if(entry == NULL) return(NULL);
 	return(entry->data);
@@ -410,7 +410,7 @@
  *  @param list the list to operate on
  *  @return the number of list items
  */
-int alpm_list_count(const alpm_list_t *list)
+int SYMEXPORT alpm_list_count(const alpm_list_t *list)
 {
 	unsigned int i = 0;
 	const alpm_list_t *lp = list;
@@ -445,7 +445,7 @@
  *  @param haystack the list to search
  *  @return 1 if `needle` is found, 0 otherwise
  */
-int alpm_list_is_strin(const char *needle, alpm_list_t *haystack)
+int SYMEXPORT alpm_list_is_strin(const char *needle, alpm_list_t *haystack)
 {
 	alpm_list_t *lp = haystack;
 	while(lp) {
--- pacman-lib-orig/lib/libalpm/conflict.c	2007-01-23 22:02:54.000000000 -0500
+++ pacman-lib/lib/libalpm/conflict.c	2007-01-26 23:01:06.000000000 -0500
@@ -359,7 +359,7 @@
 	return(conflicts);
 }
 
-const char *alpm_conflict_get_target(pmconflict_t *conflict)
+const char SYMEXPORT *alpm_conflict_get_target(pmconflict_t *conflict)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -368,7 +368,7 @@
 	return conflict->target;
 }
 
-pmconflicttype_t alpm_conflict_get_type(pmconflict_t *conflict)
+pmconflicttype_t SYMEXPORT alpm_conflict_get_type(pmconflict_t *conflict)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(-1));
@@ -377,7 +377,7 @@
 	return conflict->type;
 }
 
-const char *alpm_conflict_get_file(pmconflict_t *conflict)
+const char SYMEXPORT *alpm_conflict_get_file(pmconflict_t *conflict)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -386,7 +386,7 @@
 	return conflict->file;
 }
 
-const char *alpm_conflict_get_ctarget(pmconflict_t *conflict)
+const char SYMEXPORT *alpm_conflict_get_ctarget(pmconflict_t *conflict)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
--- pacman-lib-orig/lib/libalpm/db.c	2007-01-23 22:02:54.000000000 -0500
+++ pacman-lib/lib/libalpm/db.c	2007-01-26 23:04:31.000000000 -0500
@@ -199,7 +199,7 @@
 	return(db);
 }
 
-const char *alpm_db_get_name(pmdb_t *db)
+const char SYMEXPORT *alpm_db_get_name(pmdb_t *db)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
--- pacman-lib-orig/lib/libalpm/deps.c	2007-01-25 21:13:16.000000000 -0500
+++ pacman-lib/lib/libalpm/deps.c	2007-01-26 23:20:14.000000000 -0500
@@ -647,7 +647,7 @@
 	return(-1);
 }
 
-const char *alpm_dep_get_target(pmdepmissing_t *miss)
+const char SYMEXPORT *alpm_dep_get_target(pmdepmissing_t *miss)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -656,7 +656,7 @@
 	return miss->target;
 }
 
-pmdeptype_t alpm_dep_get_type(pmdepmissing_t *miss)
+pmdeptype_t SYMEXPORT alpm_dep_get_type(pmdepmissing_t *miss)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(-1));
@@ -665,7 +665,7 @@
 	return miss->type;
 }
 
-pmdepmod_t alpm_dep_get_mod(pmdepmissing_t *miss)
+pmdepmod_t SYMEXPORT alpm_dep_get_mod(pmdepmissing_t *miss)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(-1));
@@ -674,7 +674,7 @@
 	return miss->depend.mod;
 }
 
-const char *alpm_dep_get_name(pmdepmissing_t *miss)
+const char SYMEXPORT *alpm_dep_get_name(pmdepmissing_t *miss)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -683,7 +683,7 @@
 	return miss->depend.name;
 }
 
-const char *alpm_dep_get_version(pmdepmissing_t *miss)
+const char SYMEXPORT *alpm_dep_get_version(pmdepmissing_t *miss)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
--- pacman-lib-orig/lib/libalpm/error.c	2007-01-18 11:53:00.000000000 -0500
+++ pacman-lib/lib/libalpm/error.c	2007-01-26 22:48:51.000000000 -0500
@@ -26,7 +26,7 @@
 #include "util.h"
 #include "alpm.h"
 
-char *alpm_strerror(int err)
+char SYMEXPORT *alpm_strerror(int err)
 {
 	switch(err) {
 		/* System */
--- pacman-lib-orig/lib/libalpm/group.c	2007-01-22 20:34:58.000000000 -0500
+++ pacman-lib/lib/libalpm/group.c	2007-01-26 23:10:38.000000000 -0500
@@ -70,7 +70,7 @@
 	return(strcmp(grp1->name, grp2->name));
 }
 
-const char *alpm_grp_get_name(pmgrp_t *grp)
+const char SYMEXPORT *alpm_grp_get_name(pmgrp_t *grp)
 {
 	/* Sanity checks */
 	ASSERT(grp != NULL, return(NULL));
@@ -78,7 +78,7 @@
 	return grp->name;
 }
 
-alpm_list_t *alpm_grp_get_packages(pmgrp_t *grp)
+alpm_list_t SYMEXPORT *alpm_grp_get_packages(pmgrp_t *grp)
 {
 	/* Sanity checks */
 	ASSERT(grp != NULL, return(NULL));
--- pacman-lib-orig/lib/libalpm/handle.c	2007-01-23 22:02:54.000000000 -0500
+++ pacman-lib/lib/libalpm/handle.c	2007-01-26 23:15:54.000000000 -0500
@@ -118,9 +118,9 @@
 alpm_cb_log alpm_option_get_logcb() { return handle->logcb; }
 alpm_cb_download alpm_option_get_dlcb() { return handle->dlcb; }
 unsigned short alpm_option_get_logmask() { return handle->logmask; }
-const char *alpm_option_get_root() { return handle->root; }
-const char *alpm_option_get_dbpath() { return handle->dbpath; }
-const char *alpm_option_get_cachedir() { return handle->cachedir; }
+const char SYMEXPORT *alpm_option_get_root() { return handle->root; }
+const char SYMEXPORT *alpm_option_get_dbpath() { return handle->dbpath; }
+const char SYMEXPORT *alpm_option_get_cachedir() { return handle->cachedir; }
 const char *alpm_option_get_logfile() { return handle->logfile; }
 unsigned short alpm_option_get_usesyslog() { return handle->usesyslog; }
 alpm_list_t *alpm_option_get_noupgrades() { return handle->noupgrade; }
@@ -130,21 +130,21 @@
 time_t alpm_option_get_upgradedelay() { return handle->upgradedelay; }
 const char *alpm_option_get_xfercommand() { return handle->xfercommand; }
 unsigned short alpm_option_get_nopassiveftp() { return handle->nopassiveftp; }
-unsigned short alpm_option_get_chomp() { return handle->chomp; }
+unsigned short SYMEXPORT alpm_option_get_chomp() { return handle->chomp; }
 alpm_list_t *alpm_option_get_needles() { return handle->needles; }
 unsigned short alpm_option_get_usecolor() { return handle->use_color; }
 
 pmdb_t *alpm_option_get_localdb() { return handle->db_local; }
-alpm_list_t *alpm_option_get_syncdbs()
+alpm_list_t SYMEXPORT *alpm_option_get_syncdbs()
 {
   return handle->dbs_sync;
 }
 
-void alpm_option_set_logcb(alpm_cb_log cb) { handle->logcb = cb; }
+void SYMEXPORT alpm_option_set_logcb(alpm_cb_log cb) { handle->logcb = cb; }
 
-void alpm_option_set_dlcb(alpm_cb_download cb) { handle->dlcb = cb; }
+void SYMEXPORT alpm_option_set_dlcb(alpm_cb_download cb) { handle->dlcb = cb; }
 
-void alpm_option_set_logmask(unsigned short mask) { handle->logmask = mask; }
+void SYMEXPORT alpm_option_set_logmask(unsigned short mask) { handle->logmask = mask; }
 
 void alpm_option_set_root(const char *root)
 {
@@ -152,7 +152,7 @@
 	if(root) handle->root = strdup(root);
 }
 
-void alpm_option_set_dbpath(const char *dbpath)
+void SYMEXPORT alpm_option_set_dbpath(const char *dbpath)
 {
   if(handle->dbpath) FREE(handle->dbpath);
   if(dbpath) handle->dbpath = strdup(dbpath);
@@ -205,7 +205,7 @@
 	if(noextract) handle->noextract = noextract;
 }
 
-void alpm_option_add_ignorepkg(char *pkg)
+void SYMEXPORT alpm_option_add_ignorepkg(char *pkg)
 {
   handle->ignorepkg = alpm_list_add(handle->ignorepkg, strdup(pkg));
 }
@@ -243,7 +243,7 @@
 
 void alpm_option_set_chomp(unsigned short chomp) { handle->chomp = chomp; }
 
-void alpm_option_add_needle(char *needle)
+void SYMEXPORT alpm_option_add_needle(char *needle)
 {
   handle->needles = alpm_list_add(handle->needles, strdup(needle));
 }
--- pacman-lib-orig/lib/libalpm/package.c	2007-01-24 03:51:51.000000000 -0500
+++ pacman-lib/lib/libalpm/package.c	2007-01-26 22:56:29.000000000 -0500
@@ -457,7 +457,7 @@
 	return pkg->filename;
 }
 
-const char *alpm_pkg_get_name(pmpkg_t *pkg)
+const char SYMEXPORT *alpm_pkg_get_name(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -466,7 +466,7 @@
 	return pkg->name;
 }
 
-const char *alpm_pkg_get_version(pmpkg_t *pkg)
+const char SYMEXPORT *alpm_pkg_get_version(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -475,7 +475,7 @@
 	return pkg->version;
 }
 
-const char *alpm_pkg_get_desc(pmpkg_t *pkg)
+const char SYMEXPORT *alpm_pkg_get_desc(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -487,7 +487,7 @@
 	return pkg->desc;
 }
 
-const char *alpm_pkg_get_url(pmpkg_t *pkg)
+const char SYMEXPORT *alpm_pkg_get_url(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -499,7 +499,7 @@
 	return pkg->url;
 }
 
-const char *alpm_pkg_get_builddate(pmpkg_t *pkg)
+const char SYMEXPORT *alpm_pkg_get_builddate(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -511,7 +511,7 @@
 	return pkg->builddate;
 }
 
-const char *alpm_pkg_get_buildtype(pmpkg_t *pkg)
+const char SYMEXPORT *alpm_pkg_get_buildtype(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -523,7 +523,7 @@
 	return pkg->buildtype;
 }
 
-const char *alpm_pkg_get_installdate(pmpkg_t *pkg)
+const char SYMEXPORT *alpm_pkg_get_installdate(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -535,7 +535,7 @@
 	return pkg->installdate;
 }
 
-const char *alpm_pkg_get_packager(pmpkg_t *pkg)
+const char SYMEXPORT *alpm_pkg_get_packager(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -547,7 +547,7 @@
 	return pkg->packager;
 }
 
-const char *alpm_pkg_get_md5sum(pmpkg_t *pkg)
+const char SYMEXPORT *alpm_pkg_get_md5sum(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -559,7 +559,7 @@
 	return pkg->md5sum;
 }
 
-const char *alpm_pkg_get_sha1sum(pmpkg_t *pkg)
+const char SYMEXPORT *alpm_pkg_get_sha1sum(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -571,7 +571,7 @@
 	return pkg->sha1sum;
 }
 
-const char *alpm_pkg_get_arch(pmpkg_t *pkg)
+const char SYMEXPORT *alpm_pkg_get_arch(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -583,7 +583,7 @@
 	return pkg->arch;
 }
 
-unsigned long alpm_pkg_get_size(pmpkg_t *pkg)
+unsigned long SYMEXPORT alpm_pkg_get_size(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(-1));
@@ -595,7 +595,7 @@
 	return pkg->size;
 }
 
-unsigned long alpm_pkg_get_isize(pmpkg_t *pkg)
+unsigned long SYMEXPORT alpm_pkg_get_isize(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(-1));
@@ -607,7 +607,7 @@
 	return pkg->isize;
 }
 
-pmpkgreason_t alpm_pkg_get_reason(pmpkg_t *pkg)
+pmpkgreason_t SYMEXPORT alpm_pkg_get_reason(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(-1));
@@ -619,7 +619,7 @@
 	return pkg->reason;
 }
 
-alpm_list_t *alpm_pkg_get_licenses(pmpkg_t *pkg)
+alpm_list_t SYMEXPORT *alpm_pkg_get_licenses(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -631,7 +631,7 @@
 	return pkg->license;
 }
 
-alpm_list_t *alpm_pkg_get_groups(pmpkg_t *pkg)
+alpm_list_t SYMEXPORT *alpm_pkg_get_groups(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -644,7 +644,7 @@
 }
 
 /* depends */
-alpm_list_t *alpm_pkg_get_depends(pmpkg_t *pkg)
+alpm_list_t SYMEXPORT *alpm_pkg_get_depends(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -656,7 +656,7 @@
 	return pkg->depends;
 }
 
-alpm_list_t *alpm_pkg_get_removes(pmpkg_t *pkg)
+alpm_list_t SYMEXPORT *alpm_pkg_get_removes(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -668,7 +668,7 @@
 	return pkg->removes;
 }
 
-alpm_list_t *alpm_pkg_get_requiredby(pmpkg_t *pkg)
+alpm_list_t SYMEXPORT *alpm_pkg_get_requiredby(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -680,7 +680,7 @@
 	return pkg->requiredby;
 }
 
-alpm_list_t *alpm_pkg_get_conflicts(pmpkg_t *pkg)
+alpm_list_t SYMEXPORT *alpm_pkg_get_conflicts(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -692,7 +692,7 @@
 	return pkg->conflicts;
 }
 
-alpm_list_t *alpm_pkg_get_provides(pmpkg_t *pkg)
+alpm_list_t SYMEXPORT *alpm_pkg_get_provides(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -704,7 +704,7 @@
 	return pkg->provides;
 }
 
-alpm_list_t *alpm_pkg_get_replaces(pmpkg_t *pkg)
+alpm_list_t SYMEXPORT *alpm_pkg_get_replaces(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -716,7 +716,7 @@
 	return pkg->replaces;
 }
 
-alpm_list_t *alpm_pkg_get_files(pmpkg_t *pkg)
+alpm_list_t SYMEXPORT *alpm_pkg_get_files(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -729,7 +729,7 @@
 	return pkg->files;
 }
 
-alpm_list_t *alpm_pkg_get_backup(pmpkg_t *pkg)
+alpm_list_t SYMEXPORT *alpm_pkg_get_backup(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
@@ -742,7 +742,7 @@
 	return pkg->backup;
 }
 
-unsigned short alpm_pkg_has_scriptlet(pmpkg_t *pkg)
+unsigned short SYMEXPORT alpm_pkg_has_scriptlet(pmpkg_t *pkg)
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(-1));
--- pacman-lib-orig/lib/libalpm/sync.c	2007-01-23 22:02:54.000000000 -0500
+++ pacman-lib/lib/libalpm/sync.c	2007-01-26 23:22:18.000000000 -0500
@@ -1069,7 +1069,7 @@
 	return(-1);
 }
 
-pmsynctype_t alpm_sync_get_type(pmsyncpkg_t *sync)
+pmsynctype_t SYMEXPORT alpm_sync_get_type(pmsyncpkg_t *sync)
 {
 	/* Sanity checks */
 	ASSERT(sync != NULL, return(-1));
@@ -1077,7 +1077,7 @@
 	return sync->type;
 }
 
-pmpkg_t *alpm_sync_get_package(pmsyncpkg_t *sync)
+pmpkg_t SYMEXPORT *alpm_sync_get_package(pmsyncpkg_t *sync)
 {
 	/* Sanity checks */
 	ASSERT(sync != NULL, return(NULL));
@@ -1085,7 +1085,7 @@
 	return sync->pkg;
 }
 
-void *alpm_sync_get_data(pmsyncpkg_t *sync)
+void SYMEXPORT *alpm_sync_get_data(pmsyncpkg_t *sync)
 {
 	/* Sanity checks */
 	ASSERT(sync != NULL, return(NULL));
--- pacman-lib-orig/lib/libalpm/trans.c	2007-01-23 22:02:54.000000000 -0500
+++ pacman-lib/lib/libalpm/trans.c	2007-01-26 23:19:44.000000000 -0500
@@ -237,7 +237,7 @@
 	return handle->trans->type;
 }
 
-unsigned int alpm_trans_get_flags()
+unsigned int SYMEXPORT alpm_trans_get_flags()
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(-1));
@@ -255,7 +255,7 @@
 	return handle->trans->targets;
 }
 
-alpm_list_t * alpm_trans_get_packages()
+alpm_list_t SYMEXPORT * alpm_trans_get_packages()
 {
 	/* Sanity checks */
 	ASSERT(handle != NULL, return(NULL));
--- pacman-lib-orig/lib/libalpm/util.h	2007-01-23 22:02:54.000000000 -0500
+++ pacman-lib/lib/libalpm/util.h	2007-01-26 22:26:43.000000000 -0500
@@ -76,6 +76,10 @@
 char* mkdtemp(char *template);
 #endif
 
+/* check exported library symbols with: nm -C -D <lib> */
+#define SYMEXPORT __attribute__((visibility("default")))
+#define SYMHIDDEN __attribute__((visibility("hidden")))
+
 #endif /* _ALPM_UTIL_H */
 
 /* vim: set ts=2 sw=2 noet: */
--- pacman-lib-orig/lib/libalpm/versioncmp.c	2007-01-23 22:02:54.000000000 -0500
+++ pacman-lib/lib/libalpm/versioncmp.c	2007-01-26 22:28:32.000000000 -0500
@@ -148,7 +148,7 @@
 #endif
 
 /* this function was taken from rpm 4.0.4 and rewritten */
-int _alpm_versioncmp(const char *a, const char *b)
+int SYMEXPORT _alpm_versioncmp(const char *a, const char *b)
 {
 	char str1[64], str2[64];
 	char *ptr1, *ptr2;
