From 37d2e8bfa8aa83ed592bd25cd3c7fd58f178de9a Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Sun, 25 Apr 2010 19:11:06 +0100 Subject: [PATCH] Improve shared library building support 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 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/config/shlib-build.in | 24 +++- src/kopenafs/Makefile.in | 4 +- src/kopenafs/libkopenafs.exp | 4 - src/pam/.gitignore | 1 + src/pam/Makefile.in | 10 +- src/shlibafsauthent/.gitignore | 6 + src/shlibafsauthent/Makefile.in | 6 +- src/shlibafsauthent/libafsauthent.exp | 56 --------- src/shlibafsrpc/.gitignore | 6 + src/shlibafsrpc/Makefile.in | 7 +- src/shlibafsrpc/libafsrpc.exp | 168 -------------------------- src/shlibafsrpc/libafsrpc.map | 11 +- 12 files changed, 62 insertions(+), 241 deletions(-) delete mode 100644 src/kopenafs/libkopenafs.exp create mode 100644 src/shlibafsauthent/.gitignore delete mode 100644 src/shlibafsauthent/libafsauthent.exp create mode 100644 src/shlibafsrpc/.gitignore delete mode 100755 src/shlibafsrpc/libafsrpc.exp diff --git a/src/config/shlib-build.in b/src/config/shlib-build.in index ff8dc5477..e54742b0c 100644 --- a/src/config/shlib-build.in +++ b/src/config/shlib-build.in @@ -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" "$@" diff --git a/src/kopenafs/Makefile.in b/src/kopenafs/Makefile.in index ffcb4851a..dceeb1642 100644 --- a/src/kopenafs/Makefile.in +++ b/src/kopenafs/Makefile.in @@ -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 index 5cfc10203..000000000 --- a/src/kopenafs/libkopenafs.exp +++ /dev/null @@ -1,4 +0,0 @@ -k_hasafs -k_setpag -k_unlog -k_pioctl diff --git a/src/pam/.gitignore b/src/pam/.gitignore index c381a3cd7..9781bb0dd 100644 --- a/src/pam/.gitignore +++ b/src/pam/.gitignore @@ -3,3 +3,4 @@ # to check that you haven't inadvertently ignored any tracked files. /test_pam +/pam_afs.exp diff --git a/src/pam/Makefile.in b/src/pam/Makefile.in index 29d759614..1955c91bf 100644 --- a/src/pam/Makefile.in +++ b/src/pam/Makefile.in @@ -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 index 000000000..ae1588cb4 --- /dev/null +++ b/src/shlibafsauthent/.gitignore @@ -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 + diff --git a/src/shlibafsauthent/Makefile.in b/src/shlibafsauthent/Makefile.in index cc630714c..48a9a3e57 100644 --- a/src/shlibafsauthent/Makefile.in +++ b/src/shlibafsauthent/Makefile.in @@ -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 index b7f34af4e..000000000 --- a/src/shlibafsauthent/libafsauthent.exp +++ /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 index 000000000..f1c80078c --- /dev/null +++ b/src/shlibafsrpc/.gitignore @@ -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 + diff --git a/src/shlibafsrpc/Makefile.in b/src/shlibafsrpc/Makefile.in index b5d37161e..dddb5e723 100644 --- a/src/shlibafsrpc/Makefile.in +++ b/src/shlibafsrpc/Makefile.in @@ -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 index c73bb6319..000000000 --- a/src/shlibafsrpc/libafsrpc.exp +++ /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 diff --git a/src/shlibafsrpc/libafsrpc.map b/src/shlibafsrpc/libafsrpc.map index 8272b4326..6a45ce276 100755 --- a/src/shlibafsrpc/libafsrpc.map +++ b/src/shlibafsrpc/libafsrpc.map @@ -115,6 +115,7 @@ RXSTATS_ClearProcessRPCStats; RXSTATS_ClearPeerRPCStats; TM_GetTimeOfDay; + FT_GetTimeOfDay; strcompose; stolower; ucstring; @@ -127,7 +128,15 @@ 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: *; }; -- 2.39.5