Improve shared library building support
authorSimon Wilkinson <sxw@inf.ed.ac.uk>
Sun, 25 Apr 2010 18:11:06 +0000 (19:11 +0100)
committerDerrick Brashear <shadow@dementia.org>
Mon, 26 Apr 2010 03:49:19 +0000 (20:49 -0700)
This change removes the need to maintain two forms of symbol export
lists, instead generating the simpler lists required by AIX and Mac OS X
from the more complex Linux and Solaris mapfile. It can only handle
simple mapfiles at present, any more complex files (for example, those
which contain versioning information) will require changes to the
translation script. The now unused .exp files are removed, and a
dependency on the .map file added to the library build line.

This change adds support for export lists to Darwin for the first time.
Doing so identified a number of symbols in libafsrpc that are required
by libafsauthent, which were not being exported. Export these symbols,
and bump the minor revision of the shared library.

Change-Id: Ibd1d02bb89b85500dc2a010e6cde1f4b81efe050
Reviewed-on: http://gerrit.openafs.org/1831
Reviewed-by: Russ Allbery <rra@stanford.edu>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>

12 files changed:
src/config/shlib-build.in
src/kopenafs/Makefile.in
src/kopenafs/libkopenafs.exp [deleted file]
src/pam/.gitignore
src/pam/Makefile.in
src/shlibafsauthent/.gitignore [new file with mode: 0644]
src/shlibafsauthent/Makefile.in
src/shlibafsauthent/libafsauthent.exp [deleted file]
src/shlibafsrpc/.gitignore [new file with mode: 0644]
src/shlibafsrpc/Makefile.in
src/shlibafsrpc/libafsrpc.exp [deleted file]
src/shlibafsrpc/libafsrpc.map

index ff8dc54..e54742b 100644 (file)
@@ -79,8 +79,13 @@ if [ -z "$filename" ] ; then
 fi
 case $sysname in
 rs_aix*)
-    if [ -f "$srcdir/$library.exp" ] ; then
-        export="-bE:$srcdir/$library.exp"
+    if [ -f "$srcdir/$library.map" ] ; then
+       cat $srcdir/$library.map | \
+       awk '/local:/ {inglobal=0};
+            inglobal { sub(/;/,""); print };
+            /global:/ { inglobal=1};' \
+       > $library.exp
+        export="-bE:$library.exp"
     fi
     echo "$linker $export -o $filename $*"
     $linker $export -o "$filename" "$@"
@@ -116,6 +121,21 @@ hp_ux*)
     echo "$linker $export -o $filename $*"
     $linker $export -o "$filename" "$@"
     ;;
+*darwin*)
+    if [ -f "$srcdir/$library.map" ] ; then
+       # For 10.4 and later, the Mac exports list is a list of symbols,
+       # prefixed with an '_'
+       cat $srcdir/$library.map | \
+       awk '/local:/ {inglobal=0};
+            /^[\t ]+#/ {next};
+            inglobal { sub(/;/,""); sub(/[\t ]+/,"_"); print };
+            /global:/ { inglobal=1};' \
+       > $library.exp
+       export="-Wl,-exported_symbols_list,$library.exp"
+    fi
+    echo "$linker $export -o $filename $*"
+    $linker $export -o "$filename" "$@"
+    ;;
 *)
     echo "$linker -o $filename $*"
     $linker -o "$filename" "$@"
index ffcb485..dceeb16 100644 (file)
@@ -79,7 +79,7 @@ libkopenafs.a: ${LIBOBJS} syscall.o
        esac
        ${RANLIB} $@
 
-${LIBKOPENAFS}: ${LIBOBJS} syscall.o
+${LIBKOPENAFS}: ${LIBOBJS} syscall.o libkopenafs.map
        @set -e; set -x; case ${SYS_NAME} in \
        sgi_* | rs_aix* | hp_ux10*) \
                ../config/shlib-build -d $(srcdir) -l libkopenafs \
@@ -123,6 +123,6 @@ dest: ${LIBKOPENAFS}
 #
 clean:
        $(RM) -f *.o *.a ${LIBKOPENAFS} AFS_component_version_number.c \
-               test-setpag test-unlog
+               test-setpag test-unlog libkopenafs.exp
 
 include ../config/Makefile.version
diff --git a/src/kopenafs/libkopenafs.exp b/src/kopenafs/libkopenafs.exp
deleted file mode 100644 (file)
index 5cfc102..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-k_hasafs
-k_setpag
-k_unlog
-k_pioctl
index c381a3c..9781bb0 100644 (file)
@@ -3,3 +3,4 @@
 # to check that you haven't inadvertently ignored any tracked files.
 
 /test_pam
+/pam_afs.exp
index 29d7596..1955c91 100644 (file)
@@ -57,13 +57,16 @@ ktc_krb.o: ${srcdir}/../auth/ktc.c ${TOP_INCDIR}/afs/cellconfig.h \
        ${CC} ${CFLAGS} -DAFS_KERBEROS_ENV -c ${srcdir}/../auth/ktc.c -o $@
 
 pam_afs.so.1: $(SHOBJS) afs_setcred.o afs_auth.o afs_util.o \
-               ${TOP_LIBDIR}/libafsauthent_pic.a ${TOP_LIBDIR}/libafsrpc_pic.a
+               ${TOP_LIBDIR}/libafsauthent_pic.a \
+               ${TOP_LIBDIR}/libafsrpc_pic.a \
+               pam_afs.map
        ../config/shlib-build -d $(srcdir) -f pam_afs.so.1 -l pam_afs -- \
                afs_setcred.o afs_auth.o afs_util.o ${SHOBJS} ${LIBS}
 
 pam_afs.krb.so.1: $(SHOBJS) afs_setcred_krb.o afs_auth_krb.o afs_util_krb.o \
                ktc_krb.o ${TOP_LIBDIR}/libafsauthent_pic.a \
-               ${TOP_LIBDIR}/libafsrpc_pic.a
+               ${TOP_LIBDIR}/libafsrpc_pic.a \
+               pam_afs.map
        ../config/shlib-build -d $(srcdir) -f pam_afs.krb.so.1 -l pam_afs -- \
                afs_setcred_krb.o afs_auth_krb.o afs_util_krb.o \
                ${SHOBJS} ${KLIBS}
@@ -100,6 +103,7 @@ afs_message.o: afs_message.c afs_message.h
 # Misc. targets
 #
 clean:
-       $(RM) -f *.a *.o *.so.1 test_pam core *~ AFS_component_version_number.c
+       $(RM) -f *.a *.o *.so.1 test_pam core *~ \
+               AFS_component_version_number.c pam_afs.exp
 
 include ../config/Makefile.version
diff --git a/src/shlibafsauthent/.gitignore b/src/shlibafsauthent/.gitignore
new file mode 100644 (file)
index 0000000..ae1588c
--- /dev/null
@@ -0,0 +1,6 @@
+# After changing this file, please run
+#     git ls-files -i --exclude-standard
+# to check that you haven't inadvertently ignored any tracked files.
+
+/libafsauthent.exp
+
index cc63071..48a9a3e 100644 (file)
@@ -130,7 +130,7 @@ dest: ${LIBAFSAUTHENT} libafsauthent_pic.a
        ${INSTALL_DATA} libafsauthent_pic.a \
                ${DEST}/lib/libafsauthent_pic.a
 
-${LIBAFSAUTHENT}: ${LIBOBJS}
+${LIBAFSAUTHENT}: ${LIBOBJS} libafsauthent.map
        ../config/shlib-build -d $(srcdir) -l libafsauthent \
                -M ${LIBAFSAUTHENTMAJOR} -m ${LIBAFSAUTHENTMINOR} -- \
                -L${TOP_LIBDIR} -lafsrpc ${LIBOBJS} ${MT_LIBS}
@@ -304,4 +304,6 @@ pioctl.o: ${SYS}/pioctl.c
        ${CCRULE}
 
 clean:
-       $(RM) -f *.o *.a libafsauthent.a* libafsauthent.sl* libafsauthent.so* libafsauthent_pic.a libafsauthent.dylib.*
+       $(RM) -f *.o *.a libafsauthent.a* libafsauthent.sl* libafsauthent.so* \
+               libafsauthent_pic.a libafsauthent.dylib.* \
+               libafsauthent.exp
diff --git a/src/shlibafsauthent/libafsauthent.exp b/src/shlibafsauthent/libafsauthent.exp
deleted file mode 100644 (file)
index b7f34af..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-afsconf_AddKey
-afsconf_AddUser
-afsconf_CellApply
-afsconf_CheckAuth
-afsconf_ClientAuth
-afsconf_ClientAuthSecure
-afsconf_Close
-afsconf_DeleteKey
-afsconf_DeleteUser
-afsconf_GetCellInfo
-afsconf_GetKey
-afsconf_GetKeys
-afsconf_GetLatestKey
-afsconf_GetLocalCell
-afsconf_GetNoAuthFlag
-afsconf_GetNthUser
-afsconf_IntGetKeys
-afsconf_Open
-afsconf_ServerAuth
-afsconf_SetCellInfo
-afsconf_SetNoAuthFlag
-afsconf_SuperUser
-ka_AuthServerConn
-ka_Authenticate
-ka_CellConfig
-ka_CellToRealm
-ka_ChangePassword
-ka_ExpandCell
-ka_ExplicitCell
-ka_GetAdminToken
-ka_GetAuthToken
-ka_GetSecurity
-ka_GetServerToken
-ka_GetServers
-ka_GetToken
-ka_Init
-ka_LocalCell
-ka_ParseLoginName
-ka_ReadPassword
-ka_SingleServerConn
-ka_StringToKey
-ka_UserAuthenticateGeneral
-ka_VerifyUserToken
-ktc_ForgetAllTokens
-ktc_ForgetToken
-ktc_GetToken
-ktc_ListTokens
-ktc_OldPioctl
-ktc_SetToken
-ktc_curpag
-ubik_Call
-ubik_Call_New
-ubik_CallIter
-ubik_ClientDestroy
-ubik_ClientInit
-ubik_ParseClientList
diff --git a/src/shlibafsrpc/.gitignore b/src/shlibafsrpc/.gitignore
new file mode 100644 (file)
index 0000000..f1c8007
--- /dev/null
@@ -0,0 +1,6 @@
+# After changing this file, please run
+#     git ls-files -i --exclude-standard
+# to check that you haven't inadvertently ignored any tracked files.
+
+/libafsrpc.exp
+
index b5d3716..dddb5e7 100644 (file)
@@ -1,7 +1,7 @@
 # API version. When something changes, increment as appropriate. 
 # Ignore at your own risk.
 LIBAFSRPCMAJOR=1
-LIBAFSRPCMINOR=1
+LIBAFSRPCMINOR=2
 
 # Copyright 2000, International Business Machines Corporation and others.
 # All Rights Reserved.
@@ -159,7 +159,7 @@ dest: ${LIBAFSRPC} libafsrpc_pic.a
                -l libafsrpc -M ${LIBAFSRPCMAJOR} -m ${LIBAFSRPCMINOR}
        ${INSTALL_DATA} libafsrpc_pic.a ${DEST}/lib/libafsrpc_pic.a
 
-${LIBAFSRPC}: ${LIBOBJS}
+${LIBAFSRPC}: ${LIBOBJS} libafsrpc.map
        ../config/shlib-build -d $(srcdir) -l libafsrpc \
                -M ${LIBAFSRPCMAJOR} -m ${LIBAFSRPCMINOR} -- \
                ${LIBOBJS} ${MT_LIBS}
@@ -433,4 +433,5 @@ afsaux.o: ${FSINT}/afsaux.c
        ${CCRULE} -I../fsint
 
 clean:
-       $(RM) -f *.o libafsrpc.a* libafsrpc.sl* libafsrpc.so* libafsrpc_pic.a libafsrpc.dylib.*
+       $(RM) -f *.o libafsrpc.a* libafsrpc.sl* libafsrpc.so* \
+               libafsrpc_pic.a libafsrpc.dylib.* libafsrpc.exp
diff --git a/src/shlibafsrpc/libafsrpc.exp b/src/shlibafsrpc/libafsrpc.exp
deleted file mode 100755 (executable)
index c73bb63..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-des_cbc_cksum
-des_cbc_encrypt
-des_cbc_init
-des_check_key_parity
-des_cksum_init
-des_des_init
-des_ecb_encrypt
-des_fixup_key_parity
-des_generate_random_block
-des_init_random_number_generator
-des_is_weak_key
-des_key_sched
-des_pcbc_encrypt
-des_random_key
-des_string_to_key
-ktohl
-life_to_time
-rx_DestroyConnection
-rx_EndCall
-rx_EventPost
-rx_Finalize
-rx_GetCachedConnection
-rx_GetCall
-rx_GetIFInfo
-rx_Init
-rx_NewCall
-rx_NewConnection
-rx_NewService
-rx_PrintPeerStats
-rx_PrintStats
-rx_PrintTheseStats
-rx_ReadProc
-rx_ReleaseCachedConnection
-rx_ServerProc
-rx_StartServer
-rx_WriteProc
-rxevent_Init
-rxevent_Post
-rxkad_GetServerInfo
-rxkad_NewClientSecurityObject
-rxkad_NewServerSecurityObject
-rxkad_client_init
-rxkad_crypt_init
-rxnull_NewClientSecurityObject
-rxnull_NewServerSecurityObject
-rxs_Release
-time_to_life
-tkt_CheckTimes
-tkt_DecodeTicket
-tkt_MakeTicket
-xdr_array
-xdr_bool
-xdr_bytes
-xdr_char
-xdr_double
-xdr_enum
-xdr_float
-xdr_int
-xdr_long
-xdr_opaque
-xdr_pointer
-xdr_reference
-xdr_short
-xdr_string
-xdr_u_char
-xdr_u_int
-xdr_u_long
-xdr_u_short
-xdr_union
-xdr_vector
-xdr_void
-xdr_wrapstring
-xdrmem_create
-xdrrec_create
-xdrrec_endofrecord
-xdrrec_eof
-xdrrec_skiprecord
-xdrrx_create
-xdr_afsuuid
-xdr_int64
-hton_syserr_conv
-rxkad_global_stats
-rxkad_global_stats_lock
-rxkad_stats_key
-_et_list
-et_list_mutex
-afs_com_err
-afs_error_message
-rx_socket
-des_pcbc_init
-rx_BusyError
-rx_BusyThreshold
-rxi_connAbortThreshhold
-rxi_connAbortDelay
-rxi_callAbortThreshhold
-rxi_callAbortDelay
-RXSTATS_ExecuteRequest
-RXSTATS_RetrieveProcessRPCStats
-RXSTATS_RetrievePeerRPCStats
-RXSTATS_QueryProcessRPCStats
-RXSTATS_QueryPeerRPCStats
-RXSTATS_EnableProcessRPCStats
-RXSTATS_EnablePeerRPCStats
-RXSTATS_DisableProcessRPCStats
-RXSTATS_DisablePeerRPCStats
-RXSTATS_QueryRPCStatsVersion
-RXSTATS_ClearProcessRPCStats
-RXSTATS_ClearPeerRPCStats
-RXSTATS_function_names
-RXAFSCB_CallBack
-StartRXAFSCB_CallBack
-EndRXAFSCB_CallBack
-RXAFSCB_InitCallBackState
-RXAFSCB_Probe
-StartRXAFSCB_Probe
-EndRXAFSCB_Probe
-RXAFSCB_GetLock
-RXAFSCB_GetCE
-RXAFSCB_XStatsVersion
-RXAFSCB_GetXStats
-RXAFSCB_InitCallBackState2
-RXAFSCB_WhoAreYou
-RXAFSCB_InitCallBackState3
-RXAFSCB_ProbeUuid
-StartRXAFSCB_ProbeUuid
-EndRXAFSCB_ProbeUuid
-RXAFSCB_GetServerPrefs
-RXAFSCB_GetCellServDB
-RXAFSCB_GetLocalCell
-RXAFSCB_GetCacheConfig
-StartRXAFS_FetchData
-EndRXAFS_FetchData
-RXAFS_FetchACL
-RXAFS_FetchStatus
-StartRXAFS_StoreData
-EndRXAFS_StoreData
-RXAFS_StoreACL
-RXAFS_StoreStatus
-RXAFS_RemoveFile
-RXAFS_CreateFile
-RXAFS_Rename
-RXAFS_Symlink
-RXAFS_Link
-RXAFS_MakeDir
-RXAFS_RemoveDir
-RXAFS_OldSetLock
-RXAFS_OldExtendLock
-RXAFS_OldReleaseLock
-RXAFS_GetStatistics
-RXAFS_GiveUpCallBacks
-RXAFS_GetVolumeInfo
-RXAFS_GetVolumeStatus
-RXAFS_SetVolumeStatus
-RXAFS_GetRootVolume
-RXAFS_CheckToken
-RXAFS_GetTime
-RXAFS_NGetVolumeInfo
-RXAFS_BulkStatus
-RXAFS_SetLock
-RXAFS_ExtendLock
-RXAFS_ReleaseLock
-RXAFS_XStatsVersion
-RXAFS_GetXStats
-RXAFS_Lookup
-RXAFS_FlushCPS
-RXAFS_DFSSymlink
-RXAFSCB_function_names
-rx_GetLocalPeers
index 8272b43..6a45ce2 100755 (executable)
        RXSTATS_ClearProcessRPCStats;
        RXSTATS_ClearPeerRPCStats;
        TM_GetTimeOfDay;
+       FT_GetTimeOfDay;
        strcompose;
        stolower;
        ucstring;
        rx_SetMaxSendWindow;
        rx_GetMinPeerTimeout;
        rx_SetMinPeerTimeout;
-
+       afs_xdr_array;
+       afs_xdr_bytes;
+       afs_xdr_char;
+       afs_xdr_free;
+       afs_xdr_int;
+       afs_xdr_opaque;
+       afs_xdr_short;
+       afs_xdr_string;
+       afs_xdr_vector;
     local:
        *;
 };