diff options
author | unknown <tim@threads.polyesthetic.msg> | 2001-03-04 19:42:05 -0500 |
---|---|---|
committer | unknown <tim@threads.polyesthetic.msg> | 2001-03-04 19:42:05 -0500 |
commit | ec6ae091617bdfdca9e65e8d3e65b950d234f676 (patch) | |
tree | 9dd732e08dba156ee3d7635caedc0dc3107ecac6 /bdb/dist | |
parent | 87d70fb598105b64b538ff6b81eef9da626255b1 (diff) | |
download | mariadb-git-ec6ae091617bdfdca9e65e8d3e65b950d234f676.tar.gz |
Import changeset
Diffstat (limited to 'bdb/dist')
48 files changed, 21437 insertions, 0 deletions
diff --git a/bdb/dist/Makefile.in b/bdb/dist/Makefile.in new file mode 100644 index 00000000000..73f82cd5648 --- /dev/null +++ b/bdb/dist/Makefile.in @@ -0,0 +1,999 @@ +# $Id: Makefile.in,v 11.66 2000/11/27 16:27:51 bostic Exp $ + +srcdir= @srcdir@/.. +builddir=. + +################################################## +# C, C++ +################################################## +CPPFLAGS= -I$(builddir) -I$(srcdir)/include @CPPFLAGS@ +CFLAGS= -c $(CPPFLAGS) @CFLAGS@ +CXXFLAGS= -c $(CPPFLAGS) @CXXFLAGS@ + +CC= @MAKEFILE_CC@ +CCLINK= @MAKEFILE_CCLINK@ +CXX= @MAKEFILE_CXX@ + +INSTALLER= @INSTALLER@ + +LDFLAGS= @LDFLAGS@ +LIBDB_ARGS= @LIBDB_ARGS@ +LIBJSO_LIBS= @LIBJSO_LIBS@ +LIBS= @LIBS@ +LIBSO_LIBS= @LIBSO_LIBS@ +LIBTOOL= @LIBTOOL@ +LIBTSO_LIBS= @LIBTSO_LIBS@ +LIBXSO_LIBS= @LIBXSO_LIBS@ + +POSTLINK= @POSTLINK@ +SOLINK= @SOLINK@ +SOFLAGS= @SOFLAGS@ +SOMAJOR= @DB_VERSION_MAJOR@ +SOVERSION= @DB_VERSION_MAJOR@.@DB_VERSION_MINOR@ + +libdb= libdb.a + +libso_base= libdb +libso_linkname= $(libso_base)-$(SOVERSION).la +libso= $(libso_base)-$(SOVERSION).@SOSUFFIX@ +libso_target= $(libso_base)-$(SOVERSION).la +libso_default= $(libso_base).@SOSUFFIX@ +libso_major= $(libso_base)-$(SOMAJOR).@SOSUFFIX@ + +################################################## +# C++ +# +# C++ support is optional, and it can be used with or without shared libraries. +# You must configure it using: +# --enable-cxx +################################################## +libcxx= libdb_cxx.a +libxso_base= libdb_cxx +libxso= $(libxso_base)-$(SOVERSION).@SOSUFFIX@ +libxso_target= $(libxso_base)-$(SOVERSION).la +libxso_default= $(libxso_base).@SOSUFFIX@ +libxso_major= $(libxso_base)-$(SOMAJOR).@SOSUFFIX@ + +################################################## +# JAVA +# +# Java support is optional and requires shared librarires. +# You must configure it using: +# --enable-java --enable-dynamic +################################################## +CLASSPATH= $(JAVA_CLASSTOP) +JAR= @JAR@ +JAVAC= env CLASSPATH=$(CLASSPATH) @JAVAC@ +JAVACFLAGS= @JAVACFLAGS@ +JAVA_BUILTFILE= .javabuilt +JAVA_CLASSTOP= $(srcdir)/java/classes +JAVA_SRCDIR= $(srcdir)/java/src +JAVA_DBREL= com/sleepycat/db +JAVA_DBDIR= $(JAVA_SRCDIR)/$(JAVA_DBREL) +JAVA_EXDIR= $(JAVA_SRCDIR)/com/sleepycat/examples + +libj_jarfile= db.jar +libjso_base= libdb_java +libjso= $(libjso_base)-$(SOVERSION).@SOSUFFIX@ +libjso_target= $(libjso_base)-$(SOVERSION).la +libjso_default= $(libjso_base).@SOSUFFIX@ +libjso_major= $(libjso_base)-$(SOMAJOR).@SOSUFFIX@ +libjso_g= $(libjso_base)-$(SOVERSION)_g.@SOSUFFIX@ + +################################################## +# TCL +# +# Tcl support is optional and requires shared libraries. +# You must configure it using: +# --enable-tcl --with-tcl=DIR --enable-dynamic +################################################## +TCFLAGS= @TCFLAGS@ +libtso_base= libdb_tcl +libtso= $(libtso_base)-$(SOVERSION).@SOSUFFIX@ +libtso_target= $(libtso_base)-$(SOVERSION).la +libtso_default= $(libtso_base).@SOSUFFIX@ +libtso_major= $(libtso_base)-$(SOMAJOR).@SOSUFFIX@ + +################################################## +# DB_DUMP185 UTILITY +# +# The db_dump185 application should be compiled using the system's db.h file +# (which should be a DB 1.85/1.86 include file), and the system's 1.85/1.86 +# object library. To include the right db.h, don't include -I$(builddir) on +# the compile line. You may also need to add a local include directory and +# local libraries, for example. Do that by adding -I options to the DB185INC +# line, and -l options to the DB185LIB line. +################################################## +DB185INC= -c @CFLAGS@ -I$(srcdir)/include @CPPFLAGS@ +DB185LIB= + +################################################## +# INSTALLATION DIRECTORIES AND PERMISSIONS +################################################## +prefix= @prefix@ +exec_prefix=@exec_prefix@ +bindir= @bindir@ +includedir=@includedir@ +libdir= @libdir@ +docdir= $(prefix)/docs + +dmode= 755 +emode= 555 +fmode= 444 + +transform=@program_transform_name@ + +################################################## +# PATHS FOR STANDARD USER-LEVEL COMMANDS +################################################## +SHELL= @db_cv_path_sh@ +ar= @db_cv_path_ar@ cr +chmod= @db_cv_path_chmod@ +cp= @db_cv_path_cp@ +ln= @db_cv_path_ln@ +mkdir= @db_cv_path_mkdir@ +ranlib= @db_cv_path_ranlib@ +rm= @db_cv_path_rm@ +strip= @db_cv_path_strip@ + +################################################## +# NOTHING BELOW THIS LINE SHOULD EVER NEED TO BE MODIFIED. +################################################## +OBJS= @ADDITIONAL_OBJS@ @LIBOBJS@ @RPC_OBJS@ bt_compare@o@ bt_conv@o@ \ + bt_curadj@o@ bt_cursor@o@ bt_delete@o@ bt_method@o@ bt_open@o@ \ + bt_put@o@ bt_rec@o@ bt_reclaim@o@ bt_recno@o@ bt_rsearch@o@ \ + bt_search@o@ bt_split@o@ bt_stat@o@ bt_upgrade@o@ bt_verify@o@ \ + btree_auto@o@ crdel_auto@o@ crdel_rec@o@ db@o@ db_am@o@ db_auto@o@ \ + db_byteorder@o@ db_cam@o@ db_conv@o@ db_dispatch@o@ db_dup@o@ \ + db_err@o@ db_getlong@o@ db_iface@o@ db_join@o@ db_log2@o@ \ + db_meta@o@ db_method@o@ db_overflow@o@ db_pr@o@ db_rec@o@ \ + db_reclaim@o@ db_ret@o@ db_salloc@o@ db_shash@o@ db_upg@o@ \ + db_upg_opd@o@ db_vrfy@o@ db_vrfyutil@o@ dbm@o@ env_method@o@ \ + env_open@o@ env_recover@o@ env_region@o@ hash@o@ hash_auto@o@ \ + hash_conv@o@ hash_dup@o@ hash_func@o@ hash_meta@o@ hash_method@o@ \ + hash_page@o@ hash_rec@o@ hash_reclaim@o@ hash_stat@o@ hash_upgrade@o@ \ + hash_verify@o@ hsearch@o@ lock@o@ lock_conflict@o@ \ + lock_deadlock@o@ lock_method@o@ lock_region@o@ lock_stat@o@ \ + lock_util@o@ log@o@ log_archive@o@ log_auto@o@ log_compare@o@ \ + log_findckp@o@ log_get@o@ log_method@o@ log_put@o@ log_rec@o@ \ + log_register@o@ mp_alloc@o@ mp_bh@o@ mp_fget@o@ mp_fopen@o@ \ + mp_fput@o@ mp_fset@o@ mp_method@o@ mp_region@o@ mp_register@o@ \ + mp_stat@o@ mp_sync@o@ mp_trickle@o@ mutex@o@ os_abs@o@ \ + os_alloc@o@ os_dir@o@ os_errno@o@ os_fid@o@ os_finit@o@ \ + os_fsync@o@ os_handle@o@ os_map@o@ os_method@o@ os_oflags@o@ \ + os_open@o@ os_region@o@ os_rename@o@ os_root@o@ os_rpath@o@ \ + os_rw@o@ os_seek@o@ os_sleep@o@ os_spin@o@ os_stat@o@ \ + os_tmpdir@o@ os_unlink@o@ qam@o@ qam_auto@o@ qam_conv@o@ qam_files@o@ \ + qam_method@o@ qam_open@o@ qam_rec@o@ qam_stat@o@ qam_upgrade@o@ \ + qam_verify@o@ txn@o@ txn_auto@o@ txn_rec@o@ txn_region@o@ xa@o@ \ + xa_db@o@ xa_map@o@ + +COBJS= cxx_app@o@ cxx_except@o@ cxx_lock@o@ cxx_log@o@ cxx_mpool@o@ \ + cxx_table@o@ cxx_txn@o@ + +DBSOBJS=dbs@o@ dbs_am@o@ dbs_checkpoint@o@ dbs_debug@o@ dbs_handles@o@ \ + dbs_log@o@ dbs_qam@o@ dbs_spawn@o@ dbs_trickle@o@ dbs_util@o@ \ + dbs_yield@o@ + +EOBJS= ex_access@o@ ex_btrec@o@ ex_dbclient@o@ ex_env@o@ ex_lock@o@ \ + ex_mpool@o@ ex_thread@o@ ex_tpcb@o@ + +JOBJS= java_Db@o@ java_DbEnv@o@ java_DbLock@o@ java_DbLsn@o@ java_DbTxn@o@ \ + java_Dbc@o@ java_Dbt@o@ java_info@o@ java_locked@o@ java_util@o@ + +RPC_OBJS=client@o@ db_server_clnt@o@ db_server_xdr@o@ gen_client@o@ \ + gen_client_ret@o@ +RPC_SRV=db_server_proc@o@ db_server_svc@o@ db_server_util@o@ gen_db_server@o@ + +TOBJS= tcl_compat@o@ tcl_db@o@ tcl_db_pkg@o@ tcl_dbcursor@o@ tcl_env@o@ \ + tcl_internal@o@ tcl_lock@o@ tcl_log@o@ tcl_mp@o@ tcl_txn@o@ + +UOBJS= db_archive@o@ db_checkpoint@o@ db_deadlock@o@ db_dump185@o@ \ + db_dump@o@ db_load@o@ db_printlog@o@ db_recover@o@ db_stat@o@ \ + db_upgrade@o@ db_verify@o@ util_log@o@ util_sig@o@ + +PROGS= @ADDITIONAL_PROGS@ db_archive db_checkpoint db_deadlock \ + db_dump db_load db_printlog db_recover db_stat db_upgrade db_verify + +JAVA_DBSRCS=\ + $(JAVA_DBDIR)/Db.java $(JAVA_DBDIR)/DbAppendRecno.java \ + $(JAVA_DBDIR)/DbBtreeCompare.java \ + $(JAVA_DBDIR)/DbBtreePrefix.java $(JAVA_DBDIR)/DbBtreeStat.java \ + $(JAVA_DBDIR)/DbConstants.java $(JAVA_DBDIR)/DbDeadlockException.java \ + $(JAVA_DBDIR)/DbDupCompare.java $(JAVA_DBDIR)/DbEnv.java \ + $(JAVA_DBDIR)/DbEnvFeedback.java $(JAVA_DBDIR)/DbErrcall.java \ + $(JAVA_DBDIR)/DbException.java $(JAVA_DBDIR)/DbFeedback.java \ + $(JAVA_DBDIR)/DbHash.java $(JAVA_DBDIR)/DbHashStat.java \ + $(JAVA_DBDIR)/DbKeyRange.java $(JAVA_DBDIR)/DbLock.java \ + $(JAVA_DBDIR)/DbLockStat.java $(JAVA_DBDIR)/DbLogStat.java \ + $(JAVA_DBDIR)/DbLsn.java $(JAVA_DBDIR)/DbMemoryException.java \ + $(JAVA_DBDIR)/DbMpoolFStat.java $(JAVA_DBDIR)/DbMpoolStat.java \ + $(JAVA_DBDIR)/DbOutputStreamErrcall.java \ + $(JAVA_DBDIR)/DbQueueStat.java $(JAVA_DBDIR)/DbRecoveryInit.java \ + $(JAVA_DBDIR)/DbRunRecoveryException.java $(JAVA_DBDIR)/DbTxn.java \ + $(JAVA_DBDIR)/DbTxnRecover.java $(JAVA_DBDIR)/DbTxnStat.java \ + $(JAVA_DBDIR)/Dbc.java $(JAVA_DBDIR)/Dbt.java + +JAVA_EXSRCS=\ + $(JAVA_EXDIR)/AccessExample.java \ + $(JAVA_EXDIR)/BtRecExample.java \ + $(JAVA_EXDIR)/EnvExample.java \ + $(JAVA_EXDIR)/LockExample.java \ + $(JAVA_EXDIR)/TpcbExample.java + +################################################## +# Note: Berkeley DB Makefiles are configured to build either a static or +# a dynamic library. You should not attempt to build both library types +# in the same directory, as they have incompatible object file formats. +# To build both static and dynamic libraries, create two separate build +# directories, and configure and build them separately. +################################################## +all: @DEFAULT_LIB@ @ADDITIONAL_LIBS@ @ADDITIONAL_LANG@ $(PROGS) + +$(libdb): $(OBJS) + $(ar) $@ $(OBJS) + test ! -f $(ranlib) || $(ranlib) $@ + +$(libcxx): $(COBJS) $(OBJS) + $(ar) $@ $(COBJS) $(OBJS) + test ! -f $(ranlib) || $(ranlib) $@ + +$(libso_target): $(OBJS) + $(SOLINK) $(SOFLAGS) -o $(libso_target) \ + $(OBJS) $(LDFLAGS) $(LIBSO_LIBS) + +$(libxso_target): $(COBJS) $(OBJS) + $(SOLINK) $(SOFLAGS) -o $(libxso_target) \ + $(COBJS) $(OBJS) $(LDFLAGS) $(LIBXSO_LIBS) + +$(libjso_target): $(JOBJS) $(OBJS) + $(SOLINK) $(SOFLAGS) -o $(libjso_target) \ + $(JOBJS) $(OBJS) $(LDFLAGS) $(LIBJSO_LIBS) + +$(libtso_target): $(TOBJS) $(OBJS) + $(SOLINK) $(SOFLAGS) -o $(libtso_target) \ + $(TOBJS) $(OBJS) $(LDFLAGS) $(LIBTSO_LIBS) + +################################################## +# Creating individual dependencies and actions for building class +# files is possible, but it is very messy and error prone. +################################################## +java: $(JAVA_CLASSTOP) $(JAVA_BUILTFILE) + +$(JAVA_BUILTFILE): $(JAVA_DBSRCS) $(JAVA_EXSRCS) + @test -f $(rm) || (echo 'rm not found.'; exit 1) + @test -f $(cp) || (echo 'cp not found.'; exit 1) + $(JAVAC) -d $(JAVA_CLASSTOP) $(JAVACFLAGS) $(JAVA_DBSRCS) + @cd $(JAVA_CLASSTOP) && $(JAR) cf $(libj_jarfile) $(JAVA_DBREL) + $(JAVAC) -d $(JAVA_CLASSTOP) $(JAVACFLAGS) $(JAVA_EXSRCS) + @echo This file helps with building java using make > $(JAVA_BUILTFILE) + +$(JAVA_CLASSTOP): + @test -f $(mkdir) || (echo 'mkdir not found.'; exit 1) + $(mkdir) $(JAVA_CLASSTOP) + +################################################## +# Utilities +################################################## +berkeley_db_svc: $(RPC_SRV) util_log@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) $(RPC_SRV) util_log@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +db_archive: db_archive@o@ util_sig@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) \ + db_archive@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +db_checkpoint: db_checkpoint@o@ util_log@o@ util_sig@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) \ + db_checkpoint@o@ util_log@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +db_deadlock: db_deadlock@o@ util_log@o@ util_sig@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) \ + db_deadlock@o@ util_log@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +db_dump: db_dump@o@ util_sig@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) db_dump@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +db_dump185: db_dump185@o@ @LIBOBJS@ + $(CCLINK) -o $@ $(LDFLAGS) db_dump185@o@ @LIBOBJS@ $(DB185LIB) + $(POSTLINK) $@ + +db_load: db_load@o@ util_sig@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) db_load@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +db_printlog: db_printlog@o@ util_sig@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) \ + db_printlog@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +db_recover: db_recover@o@ util_sig@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) \ + db_recover@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +db_stat: db_stat@o@ util_sig@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) db_stat@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +db_upgrade: db_upgrade@o@ util_sig@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) \ + db_upgrade@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +db_verify: db_verify@o@ util_sig@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) \ + db_verify@o@ util_sig@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +################################################## +# Example programs +################################################## +ex_access: ex_access@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) ex_access@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +ex_btrec: ex_btrec@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) ex_btrec@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +ex_dbclient: ex_dbclient@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) ex_dbclient@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +ex_env: ex_env@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) ex_env@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +ex_lock: ex_lock@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) ex_lock@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +ex_mpool: ex_mpool@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) ex_mpool@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +ex_thread: ex_thread@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) ex_thread@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +ex_tpcb: ex_tpcb@o@ @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) ex_tpcb@o@ $(LIBDB_ARGS) $(LIBS) + $(POSTLINK) $@ + +################################################## +# Multi-threaded tester. +################################################## +dbs: $(DBSOBJS) @DEFAULT_LIB@ + $(CCLINK) -o $@ $(LDFLAGS) $(DBSOBJS) $(LIBDB_ARGS) @DBS_LIBS@ $(LIBS) + $(POSTLINK) $@ + +################################################## +# Standard Makefile targets. +################################################## +RMLIST= berkeley_db_svc db_dump185 dbs ex_access ex_btrec ex_dbclient \ + ex_env ex_lock ex_mpool ex_thread ex_tpcb +clean: + $(rm) -f $(OBJS) + $(rm) -f $(COBJS) $(DBSOBJS) $(EOBJS) $(CEOBJS) $(JOBJS) + $(rm) -f $(TOBJS) $(UOBJS) $(RPC_OBJS) $(RPC_SRV) + $(rm) -f $(PROGS) $(RMLIST) + $(rm) -f *@o@ *.o *.lo core *.core + $(rm) -rf ALL.OUT TESTDIR + $(rm) -rf .libs $(libdb) $(libcxx) + $(rm) -rf $(libso_target) $(libso) $(libso_default) $(libso_major) + $(rm) -rf $(libxso_target) $(libxso) $(libxso_default) $(libxso_major) + $(rm) -rf $(libtso_target) $(libtso) $(libtso_default) $(libtso_major) + $(rm) -rf $(libjso_target) $(libjso) $(libjso_default) $(libjso_major) + +depend obj: + +realclean distclean: clean + $(rm) -f Makefile config.cache config.log config.status db_config.h + $(rm) -f confdefs.h db.h db_int.h db_185.h include.tcl libtool + +install: all install_setup \ + install_include install_lib install_utilities install_docs + +uninstall: uninstall_utilities uninstall_include uninstall_lib uninstall_docs + +install_setup: + @test -f $(chmod) || (echo 'chmod not found.'; exit 1) + @test -f $(cp) || (echo 'cp not found.'; exit 1) + @test -f $(mkdir) || (echo 'mkdir not found.'; exit 1) + @test -f $(rm) || (echo 'rm not found.'; exit 1) + +install_include: + @echo "Installing DB include files: $(includedir) ..." + @test -d $(includedir) || \ + ($(mkdir) -p $(includedir) && $(chmod) $(dmode) $(includedir)) + @cd $(includedir) && $(rm) -f db.h db_185.h db_cxx.h + @$(cp) -p db.h \ + $(srcdir)/include/db_cxx.h @ADDITIONAL_INCS@ $(includedir) + @cd $(includedir) && $(chmod) $(fmode) db.h db_cxx.h @ADDITIONAL_INCS@ + +uninstall_include: + -cd $(includedir) && $(rm) -f db.h db_185.h db_cxx.h + +install_lib: @DEFAULT_INSTALL@ + +uninstall_lib: + -cd $(libdir) && $(rm) -f $(libdb) $(libcxx) \ + $(libso_target) $(libso) $(libso_default) $(libso_major) \ + $(libxso_target) $(libxso) $(libxso_default) $(libxso_major) \ + $(libtso_target) $(libtso) $(libtso_default) $(libtso_major) \ + $(libjso_target) $(libjso) $(libjso_default) $(libjso_major) \ + $(libj_jarfile) + +install_static: + @echo "Installing DB library: $(libdir) ..." + @test -d $(libdir) || \ + ($(mkdir) -p $(libdir) && $(chmod) $(dmode) $(libdir)) + @cd $(libdir) && $(rm) -f $(libdb) + @$(cp) -p $(libdb) $(libdir) + @cd $(libdir) && $(chmod) $(fmode) $(libdb) + +install_static_cxx: + @echo "Installing DB C++ static library: $(libdir) ..." + @test -d $(libdir) || \ + ($(mkdir) -p $(libdir) && $(chmod) $(dmode) $(libdir)) + @cd $(libdir) && $(rm) -f $(libcxx) + @$(cp) -p $(libcxx) $(libdir) + @cd $(libdir) && $(chmod) $(fmode) $(libcxx) + +install_dynamic: + @echo "Installing DB library: $(libdir) ..." + @test -d $(libdir) || \ + ($(mkdir) -p $(libdir) && $(chmod) $(dmode) $(libdir)) + @cd $(libdir) && $(rm) -f \ + $(libso_target) $(libso) $(libso_default) $(libso_major) + @$(INSTALLER) $(libso_target) $(libdir) + @cd $(libdir) && $(ln) -s $(libso) $(libso_default) + @cd $(libdir) && $(ln) -s $(libso) $(libso_major) + @$(LIBTOOL) --mode=finish $(libdir) + +install_dynamic_cxx: + @echo "Installing DB C++ library: $(libdir) ..." + @test -d $(libdir) || \ + ($(mkdir) -p $(libdir) && $(chmod) $(dmode) $(libdir)) + @cd $(libdir) && $(rm) -f \ + $(libxso_target) $(libxso) $(libxso_default) $(libxso_major) + @$(INSTALLER) $(libxso_target) $(libdir) + @cd $(libdir) && $(ln) -s $(libxso) $(libxso_default) + @cd $(libdir) && $(ln) -s $(libxso) $(libxso_major) + +install_tcl: + @echo "Installing DB Tcl library: $(libdir) ..." + @test -d $(libdir) || \ + ($(mkdir) -p $(libdir) && $(chmod) $(dmode) $(libdir)) + @cd $(libdir) && $(rm) -f \ + $(libtso_target) $(libtso) $(libtso_default) $(libtso_major) + @$(INSTALLER) $(libtso_target) $(libdir) + @cd $(libdir) && $(ln) -s $(libtso) $(libtso_default) + @cd $(libdir) && $(ln) -s $(libtso) $(libtso_major) + +install_java: + @echo "Installing DB Java library: $(libdir) ..." + @test -d $(libdir) || \ + ($(mkdir) -p $(libdir) && $(chmod) $(dmode) $(libdir)) + @cd $(libdir) && $(rm) -f \ + $(libjso_target) $(libjso) $(libjso_default) $(libjso_major) + @$(INSTALLER) $(libjso_target) $(libdir) + @cd $(libdir) && $(ln) -s $(libjso) $(libjso_default) + @cd $(libdir) && $(ln) -s $(libjso) $(libjso_major) + @cd $(libdir) && $(ln) -s $(libjso) $(libjso_g) + @$(cp) $(JAVA_CLASSTOP)/$(libj_jarfile) $(libdir) + +install_utilities: + @echo "Installing DB utilities: $(bindir) ..." + @test -d $(bindir) || \ + ($(mkdir) -p $(bindir) && $(chmod) $(dmode) $(bindir)) + @cd $(bindir) && $(rm) -f $(PROGS) + @$(INSTALLER) -fp $(PROGS) $(bindir) + @cd $(bindir) && (test ! -f $(strip) || $(strip) $(PROGS)) + @cd $(bindir) && $(chmod) $(emode) $(PROGS) + +uninstall_utilities: + -cd $(bindir) && $(rm) -f $(PROGS) + +install_docs: + @echo "Installing documentation: $(docdir) ..." + @test -d $(docdir) || \ + ($(mkdir) -p $(docdir) && $(chmod) $(dmode) $(docdir)) + @cd $(docdir) && $(rm) -rf * + @cd $(srcdir)/docs && $(cp) -pr * $(docdir)/ + +uninstall_docs: + -cd $(docdir) && $(rm) -rf * + +################################################## +# Object build rules. +################################################## +# Utilities +db_archive@o@: $(srcdir)/db_archive/db_archive.c + $(CC) $(CFLAGS) $? +db_checkpoint@o@: $(srcdir)/db_checkpoint/db_checkpoint.c + $(CC) $(CFLAGS) $? +db_deadlock@o@: $(srcdir)/db_deadlock/db_deadlock.c + $(CC) $(CFLAGS) $? +db_dump@o@: $(srcdir)/db_dump/db_dump.c + $(CC) $(CFLAGS) $? +db_dump185@o@: $(srcdir)/db_dump185/db_dump185.c + $(CC) $(DB185INC) $? +db_load@o@: $(srcdir)/db_load/db_load.c + $(CC) $(CFLAGS) $? +db_printlog@o@: $(srcdir)/db_printlog/db_printlog.c + $(CC) $(CFLAGS) $? +db_recover@o@: $(srcdir)/db_recover/db_recover.c + $(CC) $(CFLAGS) $? +db_stat@o@: $(srcdir)/db_stat/db_stat.c + $(CC) $(CFLAGS) $? +db_upgrade@o@: $(srcdir)/db_upgrade/db_upgrade.c + $(CC) $(CFLAGS) $? +db_verify@o@: $(srcdir)/db_verify/db_verify.c + $(CC) $(CFLAGS) $? + +# Examples +ex_access@o@: $(srcdir)/examples_c/ex_access.c + $(CC) $(CFLAGS) $? +ex_btrec@o@: $(srcdir)/examples_c/ex_btrec.c + $(CC) $(CFLAGS) $? +ex_dbclient@o@: $(srcdir)/examples_c/ex_dbclient.c + $(CC) $(CFLAGS) $? +ex_env@o@: $(srcdir)/examples_c/ex_env.c + $(CC) $(CFLAGS) $? +ex_lock@o@: $(srcdir)/examples_c/ex_lock.c + $(CC) $(CFLAGS) $? +ex_mpool@o@: $(srcdir)/examples_c/ex_mpool.c + $(CC) $(CFLAGS) $? +ex_thread@o@: $(srcdir)/examples_c/ex_thread.c + $(CC) $(CFLAGS) $? +ex_tpcb@o@: $(srcdir)/examples_c/ex_tpcb.c + $(CC) $(CFLAGS) $? + +# DB files +crdel_auto@o@: $(srcdir)/db/crdel_auto.c + $(CC) $(CFLAGS) $? +crdel_rec@o@: $(srcdir)/db/crdel_rec.c + $(CC) $(CFLAGS) $? +db@o@: $(srcdir)/db/db.c + $(CC) $(CFLAGS) $? +db_am@o@: $(srcdir)/db/db_am.c + $(CC) $(CFLAGS) $? +db_auto@o@: $(srcdir)/db/db_auto.c + $(CC) $(CFLAGS) $? +db_cam@o@: $(srcdir)/db/db_cam.c + $(CC) $(CFLAGS) $? +db_conv@o@: $(srcdir)/db/db_conv.c + $(CC) $(CFLAGS) $? +db_dispatch@o@: $(srcdir)/db/db_dispatch.c + $(CC) $(CFLAGS) $? +db_dup@o@: $(srcdir)/db/db_dup.c + $(CC) $(CFLAGS) $? +db_iface@o@: $(srcdir)/db/db_iface.c + $(CC) $(CFLAGS) $? +db_join@o@: $(srcdir)/db/db_join.c + $(CC) $(CFLAGS) $? +db_meta@o@: $(srcdir)/db/db_meta.c + $(CC) $(CFLAGS) $? +db_method@o@: $(srcdir)/db/db_method.c + $(CC) $(CFLAGS) $? +db_overflow@o@: $(srcdir)/db/db_overflow.c + $(CC) $(CFLAGS) $? +db_pr@o@: $(srcdir)/db/db_pr.c + $(CC) $(CFLAGS) $? +db_rec@o@: $(srcdir)/db/db_rec.c + $(CC) $(CFLAGS) $? +db_reclaim@o@: $(srcdir)/db/db_reclaim.c + $(CC) $(CFLAGS) $? +db_ret@o@: $(srcdir)/db/db_ret.c + $(CC) $(CFLAGS) $? +db_upg@o@: $(srcdir)/db/db_upg.c + $(CC) $(CFLAGS) $? +db_upg_opd@o@: $(srcdir)/db/db_upg_opd.c + $(CC) $(CFLAGS) $? +db_vrfy@o@: $(srcdir)/db/db_vrfy.c + $(CC) $(CFLAGS) $? +db_vrfyutil@o@: $(srcdir)/db/db_vrfyutil.c + $(CC) $(CFLAGS) $? + +# Environment files +db_salloc@o@: $(srcdir)/env/db_salloc.c + $(CC) $(CFLAGS) $? +db_shash@o@: $(srcdir)/env/db_shash.c + $(CC) $(CFLAGS) $? +env_method@o@: $(srcdir)/env/env_method.c + $(CC) $(CFLAGS) $? +env_open@o@: $(srcdir)/env/env_open.c + $(CC) $(CFLAGS) $? +env_recover@o@: $(srcdir)/env/env_recover.c + $(CC) $(CFLAGS) $? +env_region@o@: $(srcdir)/env/env_region.c + $(CC) $(CFLAGS) $? + +# Common files +db_byteorder@o@: $(srcdir)/common/db_byteorder.c + $(CC) $(CFLAGS) $? +db_err@o@: $(srcdir)/common/db_err.c + $(CC) $(CFLAGS) $? +db_getlong@o@: $(srcdir)/common/db_getlong.c + $(CC) $(CFLAGS) $? +db_log2@o@: $(srcdir)/common/db_log2.c + $(CC) $(CFLAGS) $? +util_log@o@: $(srcdir)/common/util_log.c + $(CC) $(CFLAGS) $? +util_sig@o@: $(srcdir)/common/util_sig.c + $(CC) $(CFLAGS) $? + +# Btree files +bt_compare@o@: $(srcdir)/btree/bt_compare.c + $(CC) $(CFLAGS) $? +bt_conv@o@: $(srcdir)/btree/bt_conv.c + $(CC) $(CFLAGS) $? +bt_curadj@o@: $(srcdir)/btree/bt_curadj.c + $(CC) $(CFLAGS) $? +bt_cursor@o@: $(srcdir)/btree/bt_cursor.c + $(CC) $(CFLAGS) $? +bt_delete@o@: $(srcdir)/btree/bt_delete.c + $(CC) $(CFLAGS) $? +bt_method@o@: $(srcdir)/btree/bt_method.c + $(CC) $(CFLAGS) $? +bt_open@o@: $(srcdir)/btree/bt_open.c + $(CC) $(CFLAGS) $? +bt_put@o@: $(srcdir)/btree/bt_put.c + $(CC) $(CFLAGS) $? +bt_rec@o@: $(srcdir)/btree/bt_rec.c + $(CC) $(CFLAGS) $? +bt_reclaim@o@: $(srcdir)/btree/bt_reclaim.c + $(CC) $(CFLAGS) $? +bt_recno@o@: $(srcdir)/btree/bt_recno.c + $(CC) $(CFLAGS) $? +bt_rsearch@o@: $(srcdir)/btree/bt_rsearch.c + $(CC) $(CFLAGS) $? +bt_search@o@: $(srcdir)/btree/bt_search.c + $(CC) $(CFLAGS) $? +bt_split@o@: $(srcdir)/btree/bt_split.c + $(CC) $(CFLAGS) $? +bt_stack@o@: $(srcdir)/btree/bt_stack.c + $(CC) $(CFLAGS) $? +bt_stat@o@: $(srcdir)/btree/bt_stat.c + $(CC) $(CFLAGS) $? +bt_upgrade@o@: $(srcdir)/btree/bt_upgrade.c + $(CC) $(CFLAGS) $? +bt_verify@o@: $(srcdir)/btree/bt_verify.c + $(CC) $(CFLAGS) $? +btree_auto@o@: $(srcdir)/btree/btree_auto.c + $(CC) $(CFLAGS) $? + +# Queue files +qam@o@: $(srcdir)/qam/qam.c + $(CC) $(CFLAGS) $? +qam_auto@o@: $(srcdir)/qam/qam_auto.c + $(CC) $(CFLAGS) $? +qam_conv@o@: $(srcdir)/qam/qam_conv.c + $(CC) $(CFLAGS) $? +qam_files@o@: $(srcdir)/qam/qam_files.c + $(CC) $(CFLAGS) $? +qam_method@o@: $(srcdir)/qam/qam_method.c + $(CC) $(CFLAGS) $? +qam_open@o@: $(srcdir)/qam/qam_open.c + $(CC) $(CFLAGS) $? +qam_rec@o@: $(srcdir)/qam/qam_rec.c + $(CC) $(CFLAGS) $? +qam_stat@o@: $(srcdir)/qam/qam_stat.c + $(CC) $(CFLAGS) $? +qam_upgrade@o@: $(srcdir)/qam/qam_upgrade.c + $(CC) $(CFLAGS) $? +qam_verify@o@: $(srcdir)/qam/qam_verify.c + $(CC) $(CFLAGS) $? + +# C++ files +cxx_app@o@: $(srcdir)/cxx/cxx_app.cpp + $(CXX) $(CXXFLAGS) $? +cxx_except@o@: $(srcdir)/cxx/cxx_except.cpp + $(CXX) $(CXXFLAGS) $? +cxx_lock@o@: $(srcdir)/cxx/cxx_lock.cpp + $(CXX) $(CXXFLAGS) $? +cxx_log@o@: $(srcdir)/cxx/cxx_log.cpp + $(CXX) $(CXXFLAGS) $? +cxx_mpool@o@: $(srcdir)/cxx/cxx_mpool.cpp + $(CXX) $(CXXFLAGS) $? +cxx_table@o@: $(srcdir)/cxx/cxx_table.cpp + $(CXX) $(CXXFLAGS) $? +cxx_txn@o@: $(srcdir)/cxx/cxx_txn.cpp + $(CXX) $(CXXFLAGS) $? + +# Java files +java_Db@o@::$(srcdir)/libdb_java/java_Db.c + $(CC) $(CFLAGS) $? +java_DbEnv@o@: $(srcdir)/libdb_java/java_DbEnv.c + $(CC) $(CFLAGS) $? +java_DbLock@o@: $(srcdir)/libdb_java/java_DbLock.c + $(CC) $(CFLAGS) $? +java_DbLsn@o@: $(srcdir)/libdb_java/java_DbLsn.c + $(CC) $(CFLAGS) $? +java_DbTxn@o@: $(srcdir)/libdb_java/java_DbTxn.c + $(CC) $(CFLAGS) $? +java_Dbc@o@: $(srcdir)/libdb_java/java_Dbc.c + $(CC) $(CFLAGS) $? +java_Dbt@o@: $(srcdir)/libdb_java/java_Dbt.c + $(CC) $(CFLAGS) $? +java_info@o@: $(srcdir)/libdb_java/java_info.c + $(CC) $(CFLAGS) $? +java_locked@o@: $(srcdir)/libdb_java/java_locked.c + $(CC) $(CFLAGS) $? +java_util@o@: $(srcdir)/libdb_java/java_util.c + $(CC) $(CFLAGS) $? + +# Tcl files +tcl_compat@o@: $(srcdir)/tcl/tcl_compat.c + $(CC) $(CFLAGS) $(TCFLAGS) $? +tcl_db@o@: $(srcdir)/tcl/tcl_db.c + $(CC) $(CFLAGS) $(TCFLAGS) $? +tcl_db_pkg@o@: $(srcdir)/tcl/tcl_db_pkg.c + $(CC) $(CFLAGS) $(TCFLAGS) $? +tcl_dbcursor@o@: $(srcdir)/tcl/tcl_dbcursor.c + $(CC) $(CFLAGS) $(TCFLAGS) $? +tcl_env@o@: $(srcdir)/tcl/tcl_env.c + $(CC) $(CFLAGS) $(TCFLAGS) $? +tcl_internal@o@: $(srcdir)/tcl/tcl_internal.c + $(CC) $(CFLAGS) $(TCFLAGS) $? +tcl_lock@o@: $(srcdir)/tcl/tcl_lock.c + $(CC) $(CFLAGS) $(TCFLAGS) $? +tcl_log@o@: $(srcdir)/tcl/tcl_log.c + $(CC) $(CFLAGS) $(TCFLAGS) $? +tcl_mp@o@: $(srcdir)/tcl/tcl_mp.c + $(CC) $(CFLAGS) $(TCFLAGS) $? +tcl_txn@o@: $(srcdir)/tcl/tcl_txn.c + $(CC) $(CFLAGS) $(TCFLAGS) $? + +# Hash files +hash_auto@o@: $(srcdir)/hash/hash_auto.c + $(CC) $(CFLAGS) $? +hash@o@: $(srcdir)/hash/hash.c + $(CC) $(CFLAGS) $? +hash_conv@o@: $(srcdir)/hash/hash_conv.c + $(CC) $(CFLAGS) $? +hash_dup@o@: $(srcdir)/hash/hash_dup.c + $(CC) $(CFLAGS) $? +hash_func@o@: $(srcdir)/hash/hash_func.c + $(CC) $(CFLAGS) $? +hash_meta@o@: $(srcdir)/hash/hash_meta.c + $(CC) $(CFLAGS) $? +hash_method@o@: $(srcdir)/hash/hash_method.c + $(CC) $(CFLAGS) $? +hash_page@o@: $(srcdir)/hash/hash_page.c + $(CC) $(CFLAGS) $? +hash_rec@o@: $(srcdir)/hash/hash_rec.c + $(CC) $(CFLAGS) $? +hash_reclaim@o@: $(srcdir)/hash/hash_reclaim.c + $(CC) $(CFLAGS) $? +hash_stat@o@: $(srcdir)/hash/hash_stat.c + $(CC) $(CFLAGS) $? +hash_upgrade@o@: $(srcdir)/hash/hash_upgrade.c + $(CC) $(CFLAGS) $? +hash_verify@o@: $(srcdir)/hash/hash_verify.c + $(CC) $(CFLAGS) $? + +# Lock files +lock@o@: $(srcdir)/lock/lock.c + $(CC) $(CFLAGS) $? +lock_conflict@o@:$(srcdir)/lock/lock_conflict.c + $(CC) $(CFLAGS) $? +lock_deadlock@o@:$(srcdir)/lock/lock_deadlock.c + $(CC) $(CFLAGS) $? +lock_method@o@:$(srcdir)/lock/lock_method.c + $(CC) $(CFLAGS) $? +lock_region@o@:$(srcdir)/lock/lock_region.c + $(CC) $(CFLAGS) $? +lock_stat@o@:$(srcdir)/lock/lock_stat.c + $(CC) $(CFLAGS) $? +lock_util@o@:$(srcdir)/lock/lock_util.c + $(CC) $(CFLAGS) $? + +# Log files +log@o@: $(srcdir)/log/log.c + $(CC) $(CFLAGS) $? +log_archive@o@: $(srcdir)/log/log_archive.c + $(CC) $(CFLAGS) $? +log_auto@o@: $(srcdir)/log/log_auto.c + $(CC) $(CFLAGS) $? +log_compare@o@: $(srcdir)/log/log_compare.c + $(CC) $(CFLAGS) $? +log_findckp@o@: $(srcdir)/log/log_findckp.c + $(CC) $(CFLAGS) $? +log_get@o@: $(srcdir)/log/log_get.c + $(CC) $(CFLAGS) $? +log_method@o@: $(srcdir)/log/log_method.c + $(CC) $(CFLAGS) $? +log_put@o@: $(srcdir)/log/log_put.c + $(CC) $(CFLAGS) $? +log_rec@o@: $(srcdir)/log/log_rec.c + $(CC) $(CFLAGS) $? +log_register@o@: $(srcdir)/log/log_register.c + $(CC) $(CFLAGS) $? + +# Mpool files +mp_alloc@o@: $(srcdir)/mp/mp_alloc.c + $(CC) $(CFLAGS) $? +mp_bh@o@: $(srcdir)/mp/mp_bh.c + $(CC) $(CFLAGS) $? +mp_fget@o@: $(srcdir)/mp/mp_fget.c + $(CC) $(CFLAGS) $? +mp_fopen@o@: $(srcdir)/mp/mp_fopen.c + $(CC) $(CFLAGS) $? +mp_fput@o@: $(srcdir)/mp/mp_fput.c + $(CC) $(CFLAGS) $? +mp_fset@o@: $(srcdir)/mp/mp_fset.c + $(CC) $(CFLAGS) $? +mp_method@o@: $(srcdir)/mp/mp_method.c + $(CC) $(CFLAGS) $? +mp_region@o@: $(srcdir)/mp/mp_region.c + $(CC) $(CFLAGS) $? +mp_register@o@: $(srcdir)/mp/mp_register.c + $(CC) $(CFLAGS) $? +mp_stat@o@: $(srcdir)/mp/mp_stat.c + $(CC) $(CFLAGS) $? +mp_sync@o@: $(srcdir)/mp/mp_sync.c + $(CC) $(CFLAGS) $? +mp_trickle@o@: $(srcdir)/mp/mp_trickle.c + $(CC) $(CFLAGS) $? + +# Mutex files +mutex@o@: $(srcdir)/mutex/mutex.c + $(CC) $(CFLAGS) $? +mut_fcntl@o@: $(srcdir)/mutex/mut_fcntl.c + $(CC) $(CFLAGS) $? +mut_pthread@o@: $(srcdir)/mutex/mut_pthread.c + $(CC) $(CFLAGS) $? +mut_tas@o@: $(srcdir)/mutex/mut_tas.c + $(CC) $(CFLAGS) $? +# UTS4 spinlock assembly. +uts4_cc@o@: $(srcdir)/mutex/uts4_cc.s + $(AS) $(ASFLAGS) -o $@ $? + +# Transaction files +txn@o@: $(srcdir)/txn/txn.c + $(CC) $(CFLAGS) $? +txn_auto@o@: $(srcdir)/txn/txn_auto.c + $(CC) $(CFLAGS) $? +txn_rec@o@: $(srcdir)/txn/txn_rec.c + $(CC) $(CFLAGS) $? +txn_region@o@: $(srcdir)/txn/txn_region.c + $(CC) $(CFLAGS) $? + +# XA files +xa@o@: $(srcdir)/xa/xa.c + $(CC) $(CFLAGS) $? +xa_db@o@: $(srcdir)/xa/xa_db.c + $(CC) $(CFLAGS) $? +xa_map@o@: $(srcdir)/xa/xa_map.c + $(CC) $(CFLAGS) $? + +# RPC client files +client@o@: $(srcdir)/rpc_client/client.c + $(CC) $(CFLAGS) $? +db_server_clnt@o@: $(srcdir)/rpc_client/db_server_clnt.c + $(CC) $(CFLAGS) $? +gen_client@o@: $(srcdir)/rpc_client/gen_client.c + $(CC) $(CFLAGS) $? +gen_client_ret@o@: $(srcdir)/rpc_client/gen_client_ret.c + $(CC) $(CFLAGS) $? + +# RPC server files +db_server_proc@o@: $(srcdir)/rpc_server/db_server_proc.c + $(CC) $(CFLAGS) $? +db_server_svc@o@: $(srcdir)/rpc_server/db_server_svc.c + $(CC) $(CFLAGS) $? +db_server_util@o@: $(srcdir)/rpc_server/db_server_util.c + $(CC) $(CFLAGS) $? +db_server_xdr@o@: $(srcdir)/rpc_server/db_server_xdr.c + $(CC) $(CFLAGS) $? +gen_db_server@o@: $(srcdir)/rpc_server/gen_db_server.c + $(CC) $(CFLAGS) $? + +# Historic compatibility files +db185@o@: $(srcdir)/db185/db185.c + $(CC) $(CFLAGS) $? +dbm@o@: $(srcdir)/dbm/dbm.c + $(CC) $(CFLAGS) $? +hsearch@o@: $(srcdir)/hsearch/hsearch.c + $(CC) $(CFLAGS) $? + +# OS specific files +os_abs@o@: $(srcdir)/os/os_abs.c + $(CC) $(CFLAGS) $? +os_alloc@o@: $(srcdir)/os/os_alloc.c + $(CC) $(CFLAGS) $? +os_dir@o@: $(srcdir)/os/os_dir.c + $(CC) $(CFLAGS) $? +os_errno@o@: $(srcdir)/os/os_errno.c + $(CC) $(CFLAGS) $? +os_fid@o@: $(srcdir)/os/os_fid.c + $(CC) $(CFLAGS) $? +os_finit@o@: $(srcdir)/os/os_finit.c + $(CC) $(CFLAGS) $? +os_fsync@o@: $(srcdir)/os/os_fsync.c + $(CC) $(CFLAGS) $? +os_handle@o@: $(srcdir)/os/os_handle.c + $(CC) $(CFLAGS) $? +os_map@o@: $(srcdir)/os/os_map.c + $(CC) $(CFLAGS) $? +os_method@o@: $(srcdir)/os/os_method.c + $(CC) $(CFLAGS) $? +os_oflags@o@: $(srcdir)/os/os_oflags.c + $(CC) $(CFLAGS) $? +os_open@o@: $(srcdir)/os/os_open.c + $(CC) $(CFLAGS) $? +os_region@o@: $(srcdir)/os/os_region.c + $(CC) $(CFLAGS) $? +os_rename@o@: $(srcdir)/os/os_rename.c + $(CC) $(CFLAGS) $? +os_root@o@: $(srcdir)/os/os_root.c + $(CC) $(CFLAGS) $? +os_rpath@o@: $(srcdir)/os/os_rpath.c + $(CC) $(CFLAGS) $? +os_rw@o@: $(srcdir)/os/os_rw.c + $(CC) $(CFLAGS) $? +os_seek@o@: $(srcdir)/os/os_seek.c + $(CC) $(CFLAGS) $? +os_sleep@o@: $(srcdir)/os/os_sleep.c + $(CC) $(CFLAGS) $? +os_spin@o@: $(srcdir)/os/os_spin.c + $(CC) $(CFLAGS) $? +os_stat@o@: $(srcdir)/os/os_stat.c + $(CC) $(CFLAGS) $? +os_tmpdir@o@: $(srcdir)/os/os_tmpdir.c + $(CC) $(CFLAGS) $? +os_unlink@o@: $(srcdir)/os/os_unlink.c + $(CC) $(CFLAGS) $? + +# Dbs. +dbs@o@: $(srcdir)/test_server/dbs.c + $(CC) $(CFLAGS) -I$(srcdir)/test_server $? +dbs_am@o@: $(srcdir)/test_server/dbs_am.c + $(CC) $(CFLAGS) -I$(srcdir)/test_server $? +dbs_checkpoint@o@: $(srcdir)/test_server/dbs_checkpoint.c + $(CC) $(CFLAGS) -I$(srcdir)/test_server $? +dbs_debug@o@: $(srcdir)/test_server/dbs_debug.c + $(CC) $(CFLAGS) -I$(srcdir)/test_server $? +dbs_handles@o@: $(srcdir)/test_server/dbs_handles.c + $(CC) $(CFLAGS) -I$(srcdir)/test_server $? +dbs_log@o@: $(srcdir)/test_server/dbs_log.c + $(CC) $(CFLAGS) -I$(srcdir)/test_server $? +dbs_qam@o@: $(srcdir)/test_server/dbs_qam.c + $(CC) $(CFLAGS) -I$(srcdir)/test_server $? +dbs_spawn@o@: $(srcdir)/test_server/dbs_spawn.c + $(CC) $(CFLAGS) -I$(srcdir)/test_server $? +dbs_trickle@o@: $(srcdir)/test_server/dbs_trickle.c + $(CC) $(CFLAGS) -I$(srcdir)/test_server $? +dbs_util@o@: $(srcdir)/test_server/dbs_util.c + $(CC) $(CFLAGS) -I$(srcdir)/test_server $? +dbs_yield@o@: $(srcdir)/test_server/dbs_yield.c + $(CC) $(CFLAGS) -I$(srcdir)/test_server $? + +# Replacement files +getcwd@o@: $(srcdir)/clib/getcwd.c + $(CC) $(CFLAGS) $? +getopt@o@: $(srcdir)/clib/getopt.c + $(CC) $(CFLAGS) $? +memcmp@o@: $(srcdir)/clib/memcmp.c + $(CC) $(CFLAGS) $? +memcpy@o@: $(srcdir)/clib/memmove.c + $(CC) -DMEMCOPY $(CFLAGS) $? -o $@ +memmove@o@: $(srcdir)/clib/memmove.c + $(CC) -DMEMMOVE $(CFLAGS) $? +raise@o@: $(srcdir)/clib/raise.c + $(CC) $(CFLAGS) $? +strcasecmp@o@: $(srcdir)/clib/strcasecmp.c + $(CC) $(CFLAGS) $? +snprintf@o@: $(srcdir)/clib/snprintf.c + $(CC) $(CFLAGS) $? +strerror@o@: $(srcdir)/clib/strerror.c + $(CC) $(CFLAGS) $? +vsnprintf@o@: $(srcdir)/clib/vsnprintf.c + $(CC) $(CFLAGS) $? diff --git a/bdb/dist/RELEASE b/bdb/dist/RELEASE new file mode 100644 index 00000000000..495c12637e2 --- /dev/null +++ b/bdb/dist/RELEASE @@ -0,0 +1,8 @@ +# $Id: RELEASE,v 11.72 2001/01/24 15:20:14 bostic Exp $ + +DB_VERSION_MAJOR=3 +DB_VERSION_MINOR=2 +DB_VERSION_PATCH=9 +DB_RELEASE_DATE=`date "+%B %e, %Y"` + +DB_VERSION_STRING="Sleepycat Software: Berkeley DB $DB_VERSION_MAJOR.$DB_VERSION_MINOR.$DB_VERSION_PATCH: ($DB_RELEASE_DATE)" diff --git a/bdb/dist/acconfig.h b/bdb/dist/acconfig.h new file mode 100644 index 00000000000..e30d0e3d2c2 --- /dev/null +++ b/bdb/dist/acconfig.h @@ -0,0 +1,108 @@ +/* + * $Id: acconfig.h,v 11.29 2000/09/20 16:30:33 bostic Exp $ + */ + +/* Define if you are building a version for running the test suite. */ +#undef CONFIG_TEST + +/* Define if you want a debugging version. */ +#undef DEBUG + +/* Define if you want a version that logs read operations. */ +#undef DEBUG_ROP + +/* Define if you want a version that logs write operations. */ +#undef DEBUG_WOP + +/* Define if you want a version with run-time diagnostic checking. */ +#undef DIAGNOSTIC + +/* Define if you want to mask harmless unitialized memory read/writes. */ +#undef UMRW + +/* Define if fcntl/F_SETFD denies child access to file descriptors. */ +#undef HAVE_FCNTL_F_SETFD + +/* Define if building big-file environment (e.g., AIX, HP/UX, Solaris). */ +#undef HAVE_FILE_OFFSET_BITS + +/* Mutex possibilities. */ +#undef HAVE_MUTEX_68K_GCC_ASSEMBLY +#undef HAVE_MUTEX_AIX_CHECK_LOCK +#undef HAVE_MUTEX_ALPHA_GCC_ASSEMBLY +#undef HAVE_MUTEX_HPPA_GCC_ASSEMBLY +#undef HAVE_MUTEX_HPPA_MSEM_INIT +#undef HAVE_MUTEX_IA64_GCC_ASSEMBLY +#undef HAVE_MUTEX_MACOS +#undef HAVE_MUTEX_MSEM_INIT +#undef HAVE_MUTEX_PPC_GCC_ASSEMBLY +#undef HAVE_MUTEX_PTHREADS +#undef HAVE_MUTEX_RELIANTUNIX_INITSPIN +#undef HAVE_MUTEX_SCO_X86_CC_ASSEMBLY +#undef HAVE_MUTEX_SEMA_INIT +#undef HAVE_MUTEX_SGI_INIT_LOCK +#undef HAVE_MUTEX_SOLARIS_LOCK_TRY +#undef HAVE_MUTEX_SOLARIS_LWP +#undef HAVE_MUTEX_SPARC_GCC_ASSEMBLY +#undef HAVE_MUTEX_THREADS +#undef HAVE_MUTEX_UI_THREADS +#undef HAVE_MUTEX_UTS_CC_ASSEMBLY +#undef HAVE_MUTEX_VMS +#undef HAVE_MUTEX_VXWORKS +#undef HAVE_MUTEX_WIN16 +#undef HAVE_MUTEX_WIN32 +#undef HAVE_MUTEX_X86_GCC_ASSEMBLY + +/* Define if building on QNX. */ +#undef HAVE_QNX + +/* Define if building RPC client/server. */ +#undef HAVE_RPC + +/* Define if your sprintf returns a pointer, not a length. */ +#undef SPRINTF_RET_CHARPNT + +@BOTTOM@ + +/* + * Big-file configuration. + */ +#ifdef HAVE_FILE_OFFSET_BITS +#define _FILE_OFFSET_BITS 64 +#endif + +/* + * Don't step on the namespace. Other libraries may have their own + * implementations of these functions, we don't want to use their + * implementations or force them to use ours based on the load order. + */ +#ifndef HAVE_GETCWD +#define getcwd __db_Cgetcwd +#endif +#ifndef HAVE_GETOPT +#define getopt __db_Cgetopt +#endif +#ifndef HAVE_MEMCMP +#define memcmp __db_Cmemcmp +#endif +#ifndef HAVE_MEMCPY +#define memcpy __db_Cmemcpy +#endif +#ifndef HAVE_MEMMOVE +#define memmove __db_Cmemmove +#endif +#ifndef HAVE_RAISE +#define raise __db_Craise +#endif +#ifndef HAVE_SNPRINTF +#define snprintf __db_Csnprintf +#endif +#ifndef HAVE_STRCASECMP +#define strcasecmp __db_Cstrcasecmp +#endif +#ifndef HAVE_STRERROR +#define strerror __db_Cstrerror +#endif +#ifndef HAVE_VSNPRINTF +#define vsnprintf __db_Cvsnprintf +#endif diff --git a/bdb/dist/aclocal/mutex.m4 b/bdb/dist/aclocal/mutex.m4 new file mode 100644 index 00000000000..5f16ee0e114 --- /dev/null +++ b/bdb/dist/aclocal/mutex.m4 @@ -0,0 +1,395 @@ +dnl $Id: mutex.m4,v 11.20 2000/12/20 22:16:56 bostic Exp $ + +dnl Figure out mutexes for this compiler/architecture. +AC_DEFUN(AM_DEFINE_MUTEXES, [ + +AC_CACHE_CHECK([for mutexes], db_cv_mutex, [dnl +db_cv_mutex=no + +orig_libs=$LIBS + +dnl User-specified POSIX mutexes. +dnl +dnl Assume that -lpthread exists when the user specifies POSIX mutexes. (I +dnl only expect this option to be used on Solaris, which has -lpthread.) +if test "$db_cv_posixmutexes" = yes; then + db_cv_mutex="posix_only" +fi + +dnl User-specified UI mutexes. +dnl +dnl Assume that -lthread exists when the user specifies UI mutexes. (I only +dnl expect this option to be used on Solaris, which has -lthread.) +if test "$db_cv_uimutexes" = yes; then + db_cv_mutex="ui_only" +fi + +dnl LWP threads: _lwp_XXX +dnl +dnl Test for LWP threads before testing for UI/POSIX threads, we prefer them +dnl on Solaris. There are two reasons: the Solaris C library has UI/POSIX +dnl interface stubs, but they're broken, configuring them for inter-process +dnl mutexes doesn't return an error, but it doesn't work either. Second, +dnl there's a bug in SunOS 5.7 where applications get pwrite, not pwrite64, +dnl if they load the C library before the appropriate threads library, e.g., +dnl tclsh using dlopen to load the DB library. Anyway, by using LWP threads +dnl we avoid answering lots of user questions, not to mention the bugs. +if test "$db_cv_mutex" = no; then +AC_TRY_RUN([ +#include <synch.h> +main(){ + static lwp_mutex_t mi = SHAREDMUTEX; + static lwp_cond_t ci = SHAREDCV; + lwp_mutex_t mutex = mi; + lwp_cond_t cond = ci; + exit ( + _lwp_mutex_lock(&mutex) || + _lwp_mutex_unlock(&mutex)); +}], [db_cv_mutex="Solaris/lwp"]) +fi + +dnl UI threads: thr_XXX +dnl +dnl Try with and without the -lthread library. +if test "$db_cv_mutex" = no -o "$db_cv_mutex" = "ui_only"; then +LIBS="-lthread $LIBS" +AC_TRY_RUN([ +#include <thread.h> +#include <synch.h> +main(){ + mutex_t mutex; + cond_t cond; + int type = USYNC_PROCESS; + exit ( + mutex_init(&mutex, type, NULL) || + cond_init(&cond, type, NULL) || + mutex_lock(&mutex) || + mutex_unlock(&mutex)); +}], [db_cv_mutex="UI/threads/library"]) +LIBS="$orig_libs" +fi +if test "$db_cv_mutex" = no -o "$db_cv_mutex" = "ui_only"; then +AC_TRY_RUN([ +#include <thread.h> +#include <synch.h> +main(){ + mutex_t mutex; + cond_t cond; + int type = USYNC_PROCESS; + exit ( + mutex_init(&mutex, type, NULL) || + cond_init(&cond, type, NULL) || + mutex_lock(&mutex) || + mutex_unlock(&mutex)); +}], [db_cv_mutex="UI/threads"]) +fi +if test "$db_cv_mutex" = "ui_only"; then + AC_MSG_ERROR([unable to find UI mutex interfaces]) +fi + + +dnl POSIX.1 pthreads: pthread_XXX +dnl +dnl Try with and without the -lpthread library. +if test "$db_cv_mutex" = no -o "$db_cv_mutex" = "posix_only"; then +AC_TRY_RUN([ +#include <pthread.h> +main(){ + pthread_cond_t cond; + pthread_mutex_t mutex; + pthread_condattr_t condattr; + pthread_mutexattr_t mutexattr; + exit ( + pthread_condattr_init(&condattr) || + pthread_condattr_setpshared(&condattr, PTHREAD_PROCESS_SHARED) || + pthread_mutexattr_init(&mutexattr) || + pthread_mutexattr_setpshared(&mutexattr, PTHREAD_PROCESS_SHARED) || + pthread_cond_init(&cond, &condattr) || + pthread_mutex_init(&mutex, &mutexattr) || + pthread_mutex_lock(&mutex) || + pthread_mutex_unlock(&mutex) || + pthread_mutex_destroy(&mutex) || + pthread_cond_destroy(&cond) || + pthread_condattr_destroy(&condattr) || + pthread_mutexattr_destroy(&mutexattr)); +}], [db_cv_mutex="POSIX/pthreads"]) +fi +if test "$db_cv_mutex" = no -o "$db_cv_mutex" = "posix_only"; then +LIBS="-lpthread $LIBS" +AC_TRY_RUN([ +#include <pthread.h> +main(){ + pthread_cond_t cond; + pthread_mutex_t mutex; + pthread_condattr_t condattr; + pthread_mutexattr_t mutexattr; + exit ( + pthread_condattr_init(&condattr) || + pthread_condattr_setpshared(&condattr, PTHREAD_PROCESS_SHARED) || + pthread_mutexattr_init(&mutexattr) || + pthread_mutexattr_setpshared(&mutexattr, PTHREAD_PROCESS_SHARED) || + pthread_cond_init(&cond, &condattr) || + pthread_mutex_init(&mutex, &mutexattr) || + pthread_mutex_lock(&mutex) || + pthread_mutex_unlock(&mutex) || + pthread_mutex_destroy(&mutex) || + pthread_cond_destroy(&cond) || + pthread_condattr_destroy(&condattr) || + pthread_mutexattr_destroy(&mutexattr)); +}], [db_cv_mutex="POSIX/pthreads/library"]) +LIBS="$orig_libs" +fi +if test "$db_cv_mutex" = "posix_only"; then + AC_MSG_ERROR([unable to find POSIX mutex interfaces]) +fi + +dnl msemaphore: HPPA only +dnl Try HPPA before general msem test, it needs special alignment. +if test "$db_cv_mutex" = no; then +AC_TRY_RUN([ +#include <sys/mman.h> +main(){ +#if defined(__hppa) + typedef msemaphore tsl_t; + msemaphore x; + msem_init(&x, 0); + msem_lock(&x, 0); + msem_unlock(&x, 0); + exit(0); +#else + exit(1); +#endif +}], [db_cv_mutex="HP/msem_init"]) +fi + +dnl msemaphore: AIX, OSF/1 +if test "$db_cv_mutex" = no; then +AC_TRY_RUN([ +#include <sys/types.h> +#include <sys/mman.h>; +main(){ + typedef msemaphore tsl_t; + msemaphore x; + msem_init(&x, 0); + msem_lock(&x, 0); + msem_unlock(&x, 0); + exit(0); +}], [db_cv_mutex="UNIX/msem_init"]) +fi + +dnl ReliantUNIX +if test "$db_cv_mutex" = no; then +LIBS="$LIBS -lmproc" +AC_TRY_LINK([#include <ulocks.h>], +[typedef spinlock_t tsl_t; +spinlock_t x; initspin(&x, 1); cspinlock(&x); spinunlock(&x);], +[db_cv_mutex="ReliantUNIX/initspin"]) +LIBS="$orig_libs" +fi + +dnl SCO: UnixWare has threads in libthread, but OpenServer doesn't. +if test "$db_cv_mutex" = no; then +AC_TRY_RUN([ +main(){ +#if defined(__USLC__) + exit(0); +#endif + exit(1); +}], [db_cv_mutex="SCO/x86/cc-assembly"]) +fi + +dnl abilock_t: SGI +if test "$db_cv_mutex" = no; then +AC_TRY_LINK([#include <abi_mutex.h>], +[typedef abilock_t tsl_t; +abilock_t x; init_lock(&x); acquire_lock(&x); release_lock(&x);], +[db_cv_mutex="SGI/init_lock"]) +fi + +dnl sema_t: Solaris +dnl The sema_XXX calls do not work on Solaris 5.5. I see no reason to ever +dnl turn this test on, unless we find some other platform that uses the old +dnl POSIX.1 interfaces. (I plan to move directly to pthreads on Solaris.) +if test "$db_cv_mutex" = DOESNT_WORK; then +AC_TRY_LINK([#include <synch.h>], +[typedef sema_t tsl_t; + sema_t x; + sema_init(&x, 1, USYNC_PROCESS, NULL); sema_wait(&x); sema_post(&x);], +[db_cv_mutex="UNIX/sema_init"]) +fi + +dnl _lock_try/_lock_clear: Solaris +dnl On Solaris systems without Pthread or UI mutex interfaces, DB uses the +dnl undocumented _lock_try _lock_clear function calls instead of either the +dnl sema_trywait(3T) or sema_wait(3T) function calls. This is because of +dnl problems in those interfaces in some releases of the Solaris C library. +if test "$db_cv_mutex" = no; then +AC_TRY_LINK([#include <sys/machlock.h>], +[typedef lock_t tsl_t; + lock_t x; + _lock_try(&x); _lock_clear(&x);], +[db_cv_mutex="Solaris/_lock_try"]) +fi + +dnl _check_lock/_clear_lock: AIX +if test "$db_cv_mutex" = no; then +AC_TRY_LINK([#include <sys/atomic_op.h>], +[int x; _check_lock(&x,0,1); _clear_lock(&x,0);], +[db_cv_mutex="AIX/_check_lock"]) +fi + +dnl Alpha/gcc: OSF/1 +dnl The alpha/gcc code doesn't work as far as I know. There are +dnl two versions, both have problems. See Support Request #1583. +if test "$db_cv_mutex" = DOESNT_WORK; then +AC_TRY_RUN([main(){ +#if defined(__alpha) +#if defined(__GNUC__) +exit(0); +#endif +#endif +exit(1);}], +[db_cv_mutex="ALPHA/gcc-assembly"]) +fi + +dnl PaRisc/gcc: HP/UX +if test "$db_cv_mutex" = no; then +AC_TRY_RUN([main(){ +#if defined(__hppa) +#if defined(__GNUC__) +exit(0); +#endif +#endif +exit(1);}], +[db_cv_mutex="HPPA/gcc-assembly"]) +fi + +dnl PPC/gcc: +if test "$db_cv_mutex" = no; then +AC_TRY_RUN([main(){ +#if defined(__powerpc__) +#if defined(__GNUC__) +exit(0); +#endif +#endif +exit(1);}], +[db_cv_mutex="PPC/gcc-assembly"]) +fi + +dnl Sparc/gcc: SunOS, Solaris +dnl The sparc/gcc code doesn't always work, specifically, I've seen assembler +dnl failures from the stbar instruction on SunOS 4.1.4/sun4c and gcc 2.7.2.2. +if test "$db_cv_mutex" = DOESNT_WORK; then +AC_TRY_RUN([main(){ +#if defined(__sparc__) +#if defined(__GNUC__) + exit(0); +#endif +#endif + exit(1); +}], [db_cv_mutex="Sparc/gcc-assembly"]) +fi + +dnl 68K/gcc: SunOS +if test "$db_cv_mutex" = no; then +AC_TRY_RUN([main(){ +#if (defined(mc68020) || defined(sun3)) +#if defined(__GNUC__) + exit(0); +#endif +#endif + exit(1); +}], [db_cv_mutex="68K/gcc-assembly"]) +fi + +dnl x86/gcc: FreeBSD, NetBSD, BSD/OS, Linux +if test "$db_cv_mutex" = no; then +AC_TRY_RUN([main(){ +#if defined(i386) || defined(__i386__) +#if defined(__GNUC__) + exit(0); +#endif +#endif + exit(1); +}], [db_cv_mutex="x86/gcc-assembly"]) +fi + +dnl ia86/gcc: Linux +if test "$db_cv_mutex" = no; then +AC_TRY_RUN([main(){ +#if defined(__ia64) +#if defined(__GNUC__) + exit(0); +#endif +#endif + exit(1); +}], [db_cv_mutex="ia64/gcc-assembly"]) +fi + +dnl: uts/cc: UTS +if test "$db_cv_mutex" = no; then +AC_TRY_RUN([main(){ +#if defined(_UTS) + exit(0); +#endif + exit(1); +}], [db_cv_mutex="UTS/cc-assembly"]) +fi +]) + +if test "$db_cv_mutex" = no; then + AC_MSG_WARN( + [THREAD MUTEXES NOT AVAILABLE FOR THIS COMPILER/ARCHITECTURE.]) + ADDITIONAL_OBJS="mut_fcntl${o} $ADDITIONAL_OBJS" +else + AC_DEFINE(HAVE_MUTEX_THREADS) +fi + +case "$db_cv_mutex" in +68K/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_68K_GCC_ASSEMBLY);; +AIX/_check_lock) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_AIX_CHECK_LOCK);; +ALPHA/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_ALPHA_GCC_ASSEMBLY);; +HP/msem_init) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_HPPA_MSEM_INIT);; +HPPA/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_HPPA_GCC_ASSEMBLY);; +ia64/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_IA64_GCC_ASSEMBLY);; +POSIX/pthreads) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_PTHREADS);; +POSIX/pthreads/library) LIBS="-lpthread $LIBS" + ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_PTHREADS);; +PPC/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_PPC_GCC_ASSEMBLY);; +ReliantUNIX/initspin) LIBS="$LIBS -lmproc" + ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_RELIANTUNIX_INITSPIN);; +SCO/x86/cc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_SCO_X86_CC_ASSEMBLY);; +SGI/init_lock) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_SGI_INIT_LOCK);; +Solaris/_lock_try) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_SOLARIS_LOCK_TRY);; +Solaris/lwp) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_SOLARIS_LWP);; +Sparc/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_SPARC_GCC_ASSEMBLY);; +UI/threads) ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_UI_THREADS);; +UI/threads/library) LIBS="-lthread $LIBS" + ADDITIONAL_OBJS="mut_pthread${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_UI_THREADS);; +UNIX/msem_init) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_MSEM_INIT);; +UNIX/sema_init) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_SEMA_INIT);; +UTS/cc-assembly) ADDITIONAL_OBJS="$ADDITIONAL_OBJS uts4.cc${o}" + AC_DEFINE(HAVE_MUTEX_UTS_CC_ASSEMBLY);; +x86/gcc-assembly) ADDITIONAL_OBJS="mut_tas${o} $ADDITIONAL_OBJS" + AC_DEFINE(HAVE_MUTEX_X86_GCC_ASSEMBLY);; +esac +])dnl diff --git a/bdb/dist/aclocal/options.m4 b/bdb/dist/aclocal/options.m4 new file mode 100644 index 00000000000..c51a3952419 --- /dev/null +++ b/bdb/dist/aclocal/options.m4 @@ -0,0 +1,121 @@ +dnl $Id: options.m4,v 11.10 2000/07/07 15:50:39 bostic Exp $ + +dnl Process user-specified options. +AC_DEFUN(AM_OPTIONS_SET, [ + +AC_MSG_CHECKING(if --disable-bigfile option specified) +AC_ARG_ENABLE(bigfile, + [ --disable-bigfile Disable AIX, HP/UX, Solaris big files.], + [db_cv_bigfile="yes"], [db_cv_bigfile="no"]) +AC_MSG_RESULT($db_cv_bigfile) + +AC_MSG_CHECKING(if --enable-compat185 option specified) +AC_ARG_ENABLE(compat185, + [ --enable-compat185 Build DB 1.85 compatibility API.], + [db_cv_compat185="$enable_compat185"], [db_cv_compat185="no"]) +AC_MSG_RESULT($db_cv_compat185) + +AC_MSG_CHECKING(if --enable-cxx option specified) +AC_ARG_ENABLE(cxx, + [ --enable-cxx Build C++ API.], + [db_cv_cxx="$enable_cxx"], [db_cv_cxx="no"]) +AC_MSG_RESULT($db_cv_cxx) + +AC_MSG_CHECKING(if --enable-debug option specified) +AC_ARG_ENABLE(debug, + [ --enable-debug Build a debugging version.], + [db_cv_debug="$enable_debug"], [db_cv_debug="no"]) +AC_MSG_RESULT($db_cv_debug) + +AC_MSG_CHECKING(if --enable-debug_rop option specified) +AC_ARG_ENABLE(debug_rop, + [ --enable-debug_rop Build a version that logs read operations.], + [db_cv_debug_rop="$enable_debug_rop"], [db_cv_debug_rop="no"]) +AC_MSG_RESULT($db_cv_debug_rop) + +AC_MSG_CHECKING(if --enable-debug_wop option specified) +AC_ARG_ENABLE(debug_wop, + [ --enable-debug_wop Build a version that logs write operations.], + [db_cv_debug_wop="$enable_debug_wop"], [db_cv_debug_wop="no"]) +AC_MSG_RESULT($db_cv_debug_wop) + +AC_MSG_CHECKING(if --enable-diagnostic option specified) +AC_ARG_ENABLE(diagnostic, + [ --enable-diagnostic Build a version with run-time diagnostics.], + [db_cv_diagnostic="$enable_diagnostic"], [db_cv_diagnostic="no"]) +AC_MSG_RESULT($db_cv_diagnostic) + +AC_MSG_CHECKING(if --enable-dump185 option specified) +AC_ARG_ENABLE(dump185, + [ --enable-dump185 Build db_dump185(1) to dump 1.85 databases.], + [db_cv_dump185="$enable_dump185"], [db_cv_dump185="no"]) +AC_MSG_RESULT($db_cv_dump185) + +AC_MSG_CHECKING(if --enable-dynamic option specified) +AC_ARG_ENABLE(dynamic, + [ --enable-dynamic Build with dynamic libraries.], + [db_cv_dynamic="$enable_dynamic"], [db_cv_dynamic="no"]) +AC_MSG_RESULT($db_cv_dynamic) + +AC_MSG_CHECKING(if --enable-java option specified) +AC_ARG_ENABLE(java, + [ --enable-java Build Java API.], + [db_cv_java="$enable_java"], [db_cv_java="no"]) +AC_MSG_RESULT($db_cv_java) + +AC_MSG_CHECKING(if --enable-posixmutexes option specified) +AC_ARG_ENABLE(posixmutexes, + [ --enable-posixmutexes Force use of POSIX standard mutexes.], + [db_cv_posixmutexes="$enable_posixmutexes"], [db_cv_posixmutexes="no"]) +AC_MSG_RESULT($db_cv_posixmutexes) + +AC_MSG_CHECKING(if --enable-rpc option specified) +AC_ARG_ENABLE(rpc, + [ --enable-rpc Build RPC client/server.], + [db_cv_rpc="$enable_rpc"], [db_cv_rpc="no"]) +AC_MSG_RESULT($db_cv_rpc) + +dnl --enable-shared is an alias for --enable-dynamic. We support it for +dnl compatibility with other applications, e.g., Tcl. +AC_MSG_CHECKING(if --enable-shared option specified) +AC_ARG_ENABLE(shared, + [ --enable-shared Build with dynamic libraries.], + [db_cv_shared="$enable_shared"], [db_cv_shared="no"]) +AC_MSG_RESULT($db_cv_shared) +if test "$db_cv_shared" != "no"; then + db_cv_dynamic="yes" +fi + +AC_MSG_CHECKING(if --enable-tcl option specified) +AC_ARG_ENABLE(tcl, + [ --enable-tcl Build Tcl API.], + [db_cv_tcl="$enable_tcl"], [db_cv_tcl="no"]) +AC_MSG_RESULT($db_cv_tcl) + +AC_MSG_CHECKING(if --enable-test option specified) +AC_ARG_ENABLE(test, + [ --enable-test Configure to run the test suite.], + [db_cv_test="$enable_test"], [db_cv_test="no"]) +AC_MSG_RESULT($db_cv_test) + +AC_MSG_CHECKING(if --enable-uimutexes option specified) +AC_ARG_ENABLE(uimutexes, + [ --enable-uimutexes Force use of Unix International mutexes.], + [db_cv_uimutexes="$enable_uimutexes"], [db_cv_uimutexes="no"]) +AC_MSG_RESULT($db_cv_uimutexes) + +AC_MSG_CHECKING(if --enable-umrw option specified) +AC_ARG_ENABLE(umrw, + [ --enable-umrw Mask harmless unitialized memory read/writes.], + [db_cv_umrw="$enable_umrw"], [db_cv_umrw="no"]) +AC_MSG_RESULT($db_cv_umrw) + +AC_MSG_CHECKING([if --with-tcl option specified]) +AC_ARG_WITH(tcl, + [ --with-tcl=DIR Directory location of tclConfig.sh.], + with_tclconfig=${withval}, with_tclconfig="no") +AC_MSG_RESULT($with_tclconfig) +if test "$with_tclconfig" != "no"; then + db_cv_tcl="yes" +fi +])dnl diff --git a/bdb/dist/aclocal/programs.m4 b/bdb/dist/aclocal/programs.m4 new file mode 100644 index 00000000000..9ec04f4d8cd --- /dev/null +++ b/bdb/dist/aclocal/programs.m4 @@ -0,0 +1,48 @@ +dnl $Id: programs.m4,v 11.11 2000/03/30 21:20:50 bostic Exp $ + +dnl Check for programs used in building/installation. +AC_DEFUN(AM_PROGRAMS_SET, [ + +AC_PATH_PROG(db_cv_path_ar, ar, missing_ar) +if test "$db_cv_path_ar" = missing_ar; then + AC_MSG_ERROR([No ar utility found.]) +fi +AC_PATH_PROG(db_cv_path_chmod, chmod, missing_chmod) +if test "$db_cv_path_chmod" = missing_chmod; then + AC_MSG_ERROR([No chmod utility found.]) +fi +AC_PATH_PROG(db_cv_path_cp, cp, missing_cp) +if test "$db_cv_path_cp" = missing_cp; then + AC_MSG_ERROR([No cp utility found.]) +fi +AC_PATH_PROG(db_cv_path_ln, ln, missing_ln) +if test "$db_cv_path_ln" = missing_ln; then + AC_MSG_ERROR([No ln utility found.]) +fi +AC_PATH_PROG(db_cv_path_mkdir, mkdir, missing_mkdir) +if test "$db_cv_path_mkdir" = missing_mkdir; then + AC_MSG_ERROR([No mkdir utility found.]) +fi +AC_PATH_PROG(db_cv_path_ranlib, ranlib, missing_ranlib) +AC_PATH_PROG(db_cv_path_rm, rm, missing_rm) +if test "$db_cv_path_rm" = missing_rm; then + AC_MSG_ERROR([No rm utility found.]) +fi +AC_PATH_PROG(db_cv_path_sh, sh, missing_sh) +if test "$db_cv_path_sh" = missing_sh; then + AC_MSG_ERROR([No sh utility found.]) +fi +AC_PATH_PROG(db_cv_path_strip, strip, missing_strip) +if test "$db_cv_path_strip" = missing_strip; then + AC_MSG_ERROR([No strip utility found.]) +fi + +dnl Check for programs used in testing. +if test "$db_cv_test" = "yes"; then + AC_PATH_PROG(db_cv_path_kill, kill, missing_kill) + if test "$db_cv_path_kill" = missing_kill; then + AC_MSG_ERROR([No kill utility found.]) + fi +fi + +])dnl diff --git a/bdb/dist/aclocal/tcl.m4 b/bdb/dist/aclocal/tcl.m4 new file mode 100644 index 00000000000..3d0aec2e8ff --- /dev/null +++ b/bdb/dist/aclocal/tcl.m4 @@ -0,0 +1,126 @@ +dnl $Id: tcl.m4,v 11.5 2000/06/27 13:21:28 bostic Exp $ + +dnl The SC_* macros in this file are from the unix/tcl.m4 files in the Tcl +dnl 8.3.0 distribution, with some minor changes. For this reason, license +dnl terms for the Berkeley DB distribution dist/aclocal/tcl.m4 file are as +dnl follows (copied from the license.terms file in the Tcl 8.3 distribution): +dnl +dnl This software is copyrighted by the Regents of the University of +dnl California, Sun Microsystems, Inc., Scriptics Corporation, +dnl and other parties. The following terms apply to all files associated +dnl with the software unless explicitly disclaimed in individual files. +dnl +dnl The authors hereby grant permission to use, copy, modify, distribute, +dnl and license this software and its documentation for any purpose, provided +dnl that existing copyright notices are retained in all copies and that this +dnl notice is included verbatim in any distributions. No written agreement, +dnl license, or royalty fee is required for any of the authorized uses. +dnl Modifications to this software may be copyrighted by their authors +dnl and need not follow the licensing terms described here, provided that +dnl the new terms are clearly indicated on the first page of each file where +dnl they apply. +dnl +dnl IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +dnl FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +dnl ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +dnl DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +dnl POSSIBILITY OF SUCH DAMAGE. +dnl +dnl THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +dnl INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +dnl FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +dnl IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +dnl NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +dnl MODIFICATIONS. +dnl +dnl GOVERNMENT USE: If you are acquiring this software on behalf of the +dnl U.S. government, the Government shall have only "Restricted Rights" +dnl in the software and related documentation as defined in the Federal +dnl Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +dnl are acquiring the software on behalf of the Department of Defense, the +dnl software shall be classified as "Commercial Computer Software" and the +dnl Government shall have only "Restricted Rights" as defined in Clause +dnl 252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the +dnl authors grant the U.S. Government and others acting in its behalf +dnl permission to use and distribute the software in accordance with the +dnl terms specified in this license. + +AC_DEFUN(SC_PATH_TCLCONFIG, [ + AC_CACHE_VAL(ac_cv_c_tclconfig,[ + + # First check to see if --with-tclconfig was specified. + if test "${with_tclconfig}" != no; then + if test -f "${with_tclconfig}/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd ${with_tclconfig}; pwd)` + else + AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) + fi + fi + + # check in a few common install locations + if test x"${ac_cv_c_tclconfig}" = x ; then + for i in `ls -d /usr/local/lib 2>/dev/null` ; do + if test -f "$i/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i; pwd)` + break + fi + done + fi + + ]) + + if test x"${ac_cv_c_tclconfig}" = x ; then + TCL_BIN_DIR="# no Tcl configs found" + AC_MSG_ERROR(can't find Tcl configuration definitions) + else + TCL_BIN_DIR=${ac_cv_c_tclconfig} + fi +]) + +AC_DEFUN(SC_LOAD_TCLCONFIG, [ + AC_MSG_CHECKING([for existence of $TCL_BIN_DIR/tclConfig.sh]) + + if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then + AC_MSG_RESULT([loading]) + . $TCL_BIN_DIR/tclConfig.sh + else + AC_MSG_RESULT([file not found]) + fi + + # + # The eval is required to do the TCL_DBGX substitution in the + # TCL_LIB_FILE variable + # + eval TCL_LIB_FILE="${TCL_LIB_FILE}" + eval TCL_LIB_FLAG="${TCL_LIB_FLAG}" + eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" + + AC_SUBST(TCL_BIN_DIR) + AC_SUBST(TCL_SRC_DIR) + AC_SUBST(TCL_LIB_FILE) + + AC_SUBST(TCL_TCLSH) + TCL_TCLSH="${TCL_PREFIX}/bin/tclsh${TCL_VERSION}" +]) + +dnl Optional Tcl API. +AC_DEFUN(AM_TCL_LOAD, [ +if test "$db_cv_tcl" != no; then + if test "$db_cv_dynamic" != "yes"; then + AC_MSG_ERROR([--with-tcl requires --enable-dynamic]) + fi + + AC_SUBST(TCFLAGS) + + SC_PATH_TCLCONFIG + SC_LOAD_TCLCONFIG + + if test x"$TCL_PREFIX" != x && test -f "$TCL_PREFIX/include/tcl.h"; then + TCFLAGS="-I$TCL_PREFIX/include" + fi + + LIBS="$LIBS $TCL_LIB_SPEC $TCL_LIBS" + + ADDITIONAL_LIBS="$ADDITIONAL_LIBS \$(libtso_target)" + DEFAULT_INSTALL="${DEFAULT_INSTALL} install_tcl" +fi]) diff --git a/bdb/dist/aclocal/types.m4 b/bdb/dist/aclocal/types.m4 new file mode 100644 index 00000000000..a9a03ab6d87 --- /dev/null +++ b/bdb/dist/aclocal/types.m4 @@ -0,0 +1,139 @@ +dnl $Id: types.m4,v 11.4 1999/12/04 19:18:28 bostic Exp $ + +dnl Check for the standard shorthand types. +AC_DEFUN(AM_SHORTHAND_TYPES, [dnl + +AC_SUBST(ssize_t_decl) +AC_CACHE_CHECK([for ssize_t], db_cv_ssize_t, [dnl +AC_TRY_COMPILE([#include <sys/types.h>], ssize_t foo;, + [db_cv_ssize_t=yes], [db_cv_ssize_t=no])]) +if test "$db_cv_ssize_t" = no; then + ssize_t_decl="typedef int ssize_t;" +fi + +AC_SUBST(u_char_decl) +AC_CACHE_CHECK([for u_char], db_cv_uchar, [dnl +AC_TRY_COMPILE([#include <sys/types.h>], u_char foo;, + [db_cv_uchar=yes], [db_cv_uchar=no])]) +if test "$db_cv_uchar" = no; then + u_char_decl="typedef unsigned char u_char;" +fi + +AC_SUBST(u_short_decl) +AC_CACHE_CHECK([for u_short], db_cv_ushort, [dnl +AC_TRY_COMPILE([#include <sys/types.h>], u_short foo;, + [db_cv_ushort=yes], [db_cv_ushort=no])]) +if test "$db_cv_ushort" = no; then + u_short_decl="typedef unsigned short u_short;" +fi + +AC_SUBST(u_int_decl) +AC_CACHE_CHECK([for u_int], db_cv_uint, [dnl +AC_TRY_COMPILE([#include <sys/types.h>], u_int foo;, + [db_cv_uint=yes], [db_cv_uint=no])]) +if test "$db_cv_uint" = no; then + u_int_decl="typedef unsigned int u_int;" +fi + +AC_SUBST(u_long_decl) +AC_CACHE_CHECK([for u_long], db_cv_ulong, [dnl +AC_TRY_COMPILE([#include <sys/types.h>], u_long foo;, + [db_cv_ulong=yes], [db_cv_ulong=no])]) +if test "$db_cv_ulong" = no; then + u_long_decl="typedef unsigned long u_long;" +fi + +dnl DB/Vi use specific integer sizes. +AC_SUBST(u_int8_decl) +AC_CACHE_CHECK([for u_int8_t], db_cv_uint8, [dnl +AC_TRY_COMPILE([#include <sys/types.h>], u_int8_t foo;, + [db_cv_uint8=yes], + AC_TRY_RUN([main(){exit(sizeof(unsigned char) != 1);}], + [db_cv_uint8="unsigned char"], [db_cv_uint8=no]))]) +if test "$db_cv_uint8" = no; then + AC_MSG_ERROR(No unsigned 8-bit integral type.) +fi +if test "$db_cv_uint8" != yes; then + u_int8_decl="typedef $db_cv_uint8 u_int8_t;" +fi + +AC_SUBST(u_int16_decl) +AC_CACHE_CHECK([for u_int16_t], db_cv_uint16, [dnl +AC_TRY_COMPILE([#include <sys/types.h>], u_int16_t foo;, + [db_cv_uint16=yes], +AC_TRY_RUN([main(){exit(sizeof(unsigned short) != 2);}], + [db_cv_uint16="unsigned short"], +AC_TRY_RUN([main(){exit(sizeof(unsigned int) != 2);}], + [db_cv_uint16="unsigned int"], [db_cv_uint16=no])))]) +if test "$db_cv_uint16" = no; then + AC_MSG_ERROR([No unsigned 16-bit integral type.]) +fi +if test "$db_cv_uint16" != yes; then + u_int16_decl="typedef $db_cv_uint16 u_int16_t;" +fi + +AC_SUBST(int16_decl) +AC_CACHE_CHECK([for int16_t], db_cv_int16, [dnl +AC_TRY_COMPILE([#include <sys/types.h>], int16_t foo;, + [db_cv_int16=yes], +AC_TRY_RUN([main(){exit(sizeof(short) != 2);}], + [db_cv_int16="short"], +AC_TRY_RUN([main(){exit(sizeof(int) != 2);}], + [db_cv_int16="int"], [db_cv_int16=no])))]) +if test "$db_cv_int16" = no; then + AC_MSG_ERROR([No signed 16-bit integral type.]) +fi +if test "$db_cv_int16" != yes; then + int16_decl="typedef $db_cv_int16 int16_t;" +fi + +AC_SUBST(u_int32_decl) +AC_CACHE_CHECK([for u_int32_t], db_cv_uint32, [dnl +AC_TRY_COMPILE([#include <sys/types.h>], u_int32_t foo;, + [db_cv_uint32=yes], +AC_TRY_RUN([main(){exit(sizeof(unsigned int) != 4);}], + [db_cv_uint32="unsigned int"], +AC_TRY_RUN([main(){exit(sizeof(unsigned long) != 4);}], + [db_cv_uint32="unsigned long"], [db_cv_uint32=no])))]) +if test "$db_cv_uint32" = no; then + AC_MSG_ERROR([No unsigned 32-bit integral type.]) +fi +if test "$db_cv_uint32" != yes; then + u_int32_decl="typedef $db_cv_uint32 u_int32_t;" +fi + +AC_SUBST(int32_decl) +AC_CACHE_CHECK([for int32_t], db_cv_int32, [dnl +AC_TRY_COMPILE([#include <sys/types.h>], int32_t foo;, + [db_cv_int32=yes], +AC_TRY_RUN([main(){exit(sizeof(int) != 4);}], + [db_cv_int32="int"], +AC_TRY_RUN([main(){exit(sizeof(long) != 4);}], + [db_cv_int32="long"], [db_cv_int32=no])))]) +if test "$db_cv_int32" = no; then + AC_MSG_ERROR([No signed 32-bit integral type.]) +fi +if test "$db_cv_int32" != yes; then + int32_decl="typedef $db_cv_int32 int32_t;" +fi + +dnl Figure out largest integral type. +AC_SUBST(db_align_t_decl) +AC_CACHE_CHECK([for largest integral type], db_cv_align_t, [dnl +AC_TRY_COMPILE([#include <sys/types.h>], long long foo;, + [db_cv_align_t="unsigned long long"], [db_cv_align_t="unsigned long"])]) +db_align_t_decl="typedef $db_cv_align_t db_align_t;" + +dnl Figure out integral type the same size as a pointer. +AC_SUBST(db_alignp_t_decl) +AC_CACHE_CHECK([for integral type equal to pointer size], db_cv_alignp_t, [dnl +db_cv_alignp_t=$db_cv_align_t +AC_TRY_RUN([main(){exit(sizeof(unsigned int) != sizeof(char *));}], + [db_cv_alignp_t="unsigned int"]) +AC_TRY_RUN([main(){exit(sizeof(unsigned long) != sizeof(char *));}], + [db_cv_alignp_t="unsigned long"]) +AC_TRY_RUN([main(){exit(sizeof(unsigned long long) != sizeof(char *));}], + [db_cv_alignp_t="unsigned long long"])]) +db_alignp_t_decl="typedef $db_cv_alignp_t db_alignp_t;" + +])dnl diff --git a/bdb/dist/build/chk.def b/bdb/dist/build/chk.def new file mode 100755 index 00000000000..abd12b83908 --- /dev/null +++ b/bdb/dist/build/chk.def @@ -0,0 +1,50 @@ +#!/bin/sh - +# +# $Id: chk.def,v 1.4 2000/12/12 18:20:59 bostic Exp $ +# +# Check to make sure we haven't forgotten to add any interfaces +# to the Win32 libdb.def file. + +# Run from the top-level directory. +[ -f db_config.h ] && cd .. + +f=build_win32/libdb.def +t1=/tmp/__1 +t2=/tmp/__2 + +sed '/; /d' $f | + egrep @ | + awk '{print $1}' | + sed -e '/db_xa_switch/d' \ + -e '/^__/d' -e '/^;/d' | + sort > ${t1} + +egrep __P include/db.src | + sed '/^[a-z]/!d' | + awk '{print $2}' | + sed 's/^\*//' | + sed '/^__/d' | sort > ${t2} + +if cmp -s ${t1} ${t2} ; then + : +else + echo "<<< libdb.def" + echo ">>> DB include files" + diff ${t1} ${t2} +fi + +# Check to make sure we don't have any extras in the libdb.def file. +sed '/; /d' $f | + egrep @ | + awk '{print $1}' | + sed -e '/__db_global_values/d' > ${t1} + +for i in `cat ${t1}`; do + if egrep $i */*.c > /dev/null; then + : + else + echo "$f: $i not found in DB sources" + fi +done + +rm -f ${t1} ${t2} diff --git a/bdb/dist/build/chk.define b/bdb/dist/build/chk.define new file mode 100755 index 00000000000..9e2aa0db498 --- /dev/null +++ b/bdb/dist/build/chk.define @@ -0,0 +1,55 @@ +#!/bin/sh - +# +# $Id: chk.define,v 1.8 2000/12/12 18:20:59 bostic Exp $ +# +# Check to make sure that all #defines are actually used. + +# Run from the top-level directory. +[ -f db_config.h ] && cd .. + +t1=/tmp/__1 + +egrep '^#define' include/*.h | + sed -e '/db_185.h/d' -e '/xa.h/d' | + awk '{print $2}' | + sed -e '/^B_DELETE/d' \ + -e '/^B_MAX/d' \ + -e '/^CIRCLEQ/d' \ + -e '/^DB_RO_ACCESS/d' \ + -e '/^DEFINE_DB_CLASS/d' \ + -e '/^LIST/d' \ + -e '/^LOG_OP/d' \ + -e '/^MINFILL/d' \ + -e '/^MUTEX_FIELDS/d' \ + -e '/^NCACHED2X/d' \ + -e '/^NCACHED30/d' \ + -e '/^PAIR_MASK/d' \ + -e '/^POWER_OF_TWO/d' \ + -e '/^P_16_COPY/d' \ + -e '/^P_32_COPY/d' \ + -e '/^P_32_SWAP/d' \ + -e '/^SH_CIRCLEQ/d' \ + -e '/^SH_LIST/d' \ + -e '/^SH_TAILQ/d' \ + -e '/^TAILQ/d' \ + -e '/UNUSED/d' \ + -e '/^WRAPPED_CLASS/d' \ + -e '/^XA_$/d' \ + -e '/^_DB_SERVER_H_RPCGEN/d' \ + -e '/_AUTO_H$/d' \ + -e '/_H_$/d' \ + -e '/ext_h_/d' \ + -e '/^i_/d' \ + -e 's/(.*//' | sort > ${t1} + +for i in `cat ${t1}`; do + if egrep -w $i */*.c */*.cpp > /dev/null; then + :; + else + f=`egrep -l $i include/*.h | + sed 's;include/;;' | tr -s "[:space:]" " "` + echo "$i: $f" + fi +done | sort +1 + +rm -f ${t1} diff --git a/bdb/dist/build/chk.offt b/bdb/dist/build/chk.offt new file mode 100755 index 00000000000..ea7f0b914fc --- /dev/null +++ b/bdb/dist/build/chk.offt @@ -0,0 +1,19 @@ +#!/bin/sh - +# +# $Id: chk.offt,v 1.3 2000/12/12 18:20:59 bostic Exp $ +# +# Make sure that no off_t's have snuck into the release. + +# Run from the top-level directory. +[ -f db_config.h ] && cd .. + +egrep -w off_t */*.[ch] | +sed -e "/#undef off_t/d" \ + -e "/mp_fopen.c:.*can't use off_t's here/d" \ + -e "/mp_fopen.c:.*size or type off_t's or/d" \ + -e "/mp_fopen.c:.*where an off_t is 32-bits/d" \ + -e "/os_map.c:.*(off_t)0))/d" \ + -e "/os_rw.c:.*(off_t)db_iop->pgno/d" \ + -e "/os_seek.c:.*off_t offset;/d" \ + -e "/os_seek.c:.*offset = /d" \ + -e "/test_vxworks\/vx_mutex.c:/d" diff --git a/bdb/dist/build/chk.srcfiles b/bdb/dist/build/chk.srcfiles new file mode 100755 index 00000000000..cfd6f955ea7 --- /dev/null +++ b/bdb/dist/build/chk.srcfiles @@ -0,0 +1,29 @@ +#!/bin/sh - +# +# $Id: chk.srcfiles,v 1.3 2000/12/12 18:20:59 bostic Exp $ +# +# Check to make sure we haven't forgotten to add any files to the list +# of source files Win32 uses to build its dsp files. + +# Run from the top-level directory. +[ -f db_config.h ] && cd .. + +f=dist/srcfiles.in +t1=/tmp/__1 +t2=/tmp/__2 + +sed -e '/^[ #]/d' \ + -e '/^$/d' < $f | + awk '{print $1}' > ${t1} +find . -type f | + sed -e 's/^\.\///' | + egrep '\.c$|\.cpp$|\.def$|\.rc$' | + sed -e '/dist\/build\/chk.def/d' \ + -e '/perl.DB_File\/version.c/d' | + sort > ${t2} + +cmp ${t1} ${t2} > /dev/null || +(echo "<<< srcfiles.in >>> existing files" && \ + diff ${t1} ${t2} | tee /tmp/_f) + +rm -f ${t1} ${t2} diff --git a/bdb/dist/build/chk.tags b/bdb/dist/build/chk.tags new file mode 100755 index 00000000000..fa67927e731 --- /dev/null +++ b/bdb/dist/build/chk.tags @@ -0,0 +1,39 @@ +#!/bin/sh - +# +# $Id: chk.tags,v 1.5 2000/12/22 15:35:32 bostic Exp $ +# +# Check to make sure we don't need any more symbolic links to tags files. + +# Run from the top-level directory. +[ -f db_config.h ] && cd .. + +t1=/tmp/__1 +t2=/tmp/__2 + +(ls -F | egrep / | sort | + sed -e 's/\///' \ + -e '/^CVS$/d' \ + -e '/^build_vxworks$/d' \ + -e '/^build_win32$/d' \ + -e '/^docs$/d' \ + -e '/^docs.text$/d' \ + -e '/^docs_src$/d' \ + -e '/^docs_text$/d' \ + -e '/^java$/d' \ + -e '/^perl.BerkeleyDB$/d' \ + -e '/^perl.DB_File$/d' \ + -e '/^test$/d' \ + -e '/^test_purify$/d' \ + -e '/^test_thread$/d' \ + -e '/^test_vxworks$/d') > ${t1} + +(ls */tags | sed 's/\/tags$//' | sort) > ${t2} +if diff ${t1} ${t2} > /dev/null; then + : +else + echo "<<< source tree" + echo ">>> tags files" + diff ${t1} ${t2} +fi + +rm -f ${t1} ${t2} diff --git a/bdb/dist/build/script b/bdb/dist/build/script new file mode 100644 index 00000000000..8eef3099f08 --- /dev/null +++ b/bdb/dist/build/script @@ -0,0 +1,94 @@ +#!/bin/sh - +# $Id: script,v 1.21 2001/01/19 18:13:16 bostic Exp $ +# +# Build the distribution archives. +# +# A set of commands intended to be cut and pasted into a csh window. + +# Development tree, release home. +setenv D /a/db + +# Update the release number. +cd $D/dist +vi RELEASE +setenv VERSION \ +`sh -c '. RELEASE; echo $DB_VERSION_MAJOR.$DB_VERSION_MINOR.$DB_VERSION_PATCH'` +echo "Version: $VERSION" + +# Make sure the source tree is up-to-date, generate new support files, and +# commit anything that's changed. +cd $D && cvs -q update +cd $D/dist && sh s_all +cd $D && cvs -q commit + +# Build the documentation. +cd $D/docs_src && make clean +cd $D/docs_src && make +cd $D/docs_src && make && make check + +# Copy a development tree into a release tree. +setenv R /a/db-$VERSION +rm -rf $R && mkdir -p $R +cd $D && tar cf - \ +`cvs -q status | sed -n -e "/Repository/s;.*/CVSROOT/db/;;" -e "s/,v//p"` | \ +(cd $R && tar xpf -) + +# Fix symbolic links and permissions. +cd $R/dist && sh s_perm +cd $R/dist && sh s_symlink + +# Build the documents. +cd $R/docs_src && make + +# Build a version. +cd $R && rm -rf build_run && mkdir build_run +cd $R/build_run && ~bostic/bin/dbconf && make >& mklog + +# Smoke test. +./ex_access + +# Check the install +make prefix=`pwd`/BDB install + +# Run distribution check scripts +$R/dist/build/chk.def +$R/dist/build/chk.define +$R/dist/build/chk.offt +$R/dist/build/chk.srcfiles +$R/dist/build/chk.tags + +# Clean up the tree. +cd $R && rm -rf build_run docs_src +cd $R && rm -rf test_thread test_purify test_server test_vxworks test/TODO +cd $R && rm -rf test/upgrade/databases && mkdir test/upgrade/databases + +# ACQUIRE ROOT PRIVILEGES +cd $R && find . -type d | xargs chmod 775 +cd $R && find . -type f | xargs chmod 444 +cd $R/dist && sh s_perm +chown -R 100.100 $R +# DISCARD ROOT PRIVILEGES + +# Compare this release with the last one. +set LR=3.1.X +cd $R/.. && gzcat /a/releases/db-${LR}.tar.gz | tar xf - +cd $R/../db-${LR} && find . | sort > /tmp/__OLD +cd $R && find . | sort > /tmp/__NEW +diff -c /tmp/__OLD /tmp/__NEW + +# Create the tar archive release. +setenv T "$R/../db-$VERSION.tar.gz" +cd $R/.. && tar cf - db-$VERSION | gzip --best > $T +chmod 444 $T + +# Create the zip archive release. +# +# Remove symbolic links to tags files. They're large and we don't want to +# store real symbolic links in the archive for portability reasons. +# ACQUIRE ROOT PRIVILEGES +cd $R && rm -f `find . -type l -name 'tags'` +# DISCARD ROOT PRIVILEGES + +setenv T "$R/../db-$VERSION.zip" +cd $R/.. && zip -r - db-$VERSION > $T +chmod 444 $T diff --git a/bdb/dist/config.guess b/bdb/dist/config.guess new file mode 100755 index 00000000000..08e8a750ac6 --- /dev/null +++ b/bdb/dist/config.guess @@ -0,0 +1,1289 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 +# Free Software Foundation, Inc. + +version='2000-09-05' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Written by Per Bothner <bothner@cygnus.com>. +# Please send patches to <config-patches@gnu.org>. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit system type (host/target name). +# +# Only a few systems have been added to this list; please add others +# (but try to keep the structure clean). +# + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of this system. + +Operation modes: + -h, --help print this help, then exit + -V, --version print version number, then exit" + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case "$1" in + --version | --vers* | -V ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + exec >&2 + echo "$me: invalid option $1" + echo "$help" + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +# Use $HOST_CC if defined. $CC may point to a cross-compiler +if test x"$CC_FOR_BUILD" = x; then + if test x"$HOST_CC" != x; then + CC_FOR_BUILD="$HOST_CC" + else + if test x"$CC" != x; then + CC_FOR_BUILD="$CC" + else + CC_FOR_BUILD=cc + fi + fi +fi + + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 8/24/94.) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +dummy=dummy-$$ +trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15 + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # Netbsd (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # Determine the machine/vendor (is the vendor relevant). + case "${UNAME_MACHINE}" in + amiga) machine=m68k-unknown ;; + arm32) machine=arm-unknown ;; + atari*) machine=m68k-atari ;; + sun3*) machine=m68k-sun ;; + mac68k) machine=m68k-apple ;; + macppc) machine=powerpc-apple ;; + hp3[0-9][05]) machine=m68k-hp ;; + ibmrt|romp-ibm) machine=romp-ibm ;; + *) machine=${UNAME_MACHINE}-unknown ;; + esac + # The Operating System including object format. + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + # The OS release + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + cat <<EOF >$dummy.s + .data +\$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + + .text + .globl main + .align 4 + .ent main +main: + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit + .end main +EOF + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null + if test "$?" = 0 ; then + case `./$dummy` in + 0-0) + UNAME_MACHINE="alpha" + ;; + 1-0) + UNAME_MACHINE="alphaev5" + ;; + 1-1) + UNAME_MACHINE="alphaev56" + ;; + 1-101) + UNAME_MACHINE="alphapca56" + ;; + 2-303) + UNAME_MACHINE="alphaev6" + ;; + 2-307) + UNAME_MACHINE="alphaev67" + ;; + esac + fi + rm -f $dummy.s $dummy + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + arc64:OpenBSD:*:*) + echo mips64el-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hkmips:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + atari*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + sun3*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include <stdio.h> /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy \ + && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i?86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + sed 's/^ //' << EOF >$dummy.c + #include <sys/systemcfg.h> + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:4) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` + if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=4.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include <stdlib.h> + #include <unistd.h> + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` + rm -f $dummy.c $dummy + esac + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + sed 's/^ //' << EOF >$dummy.c + #include <unistd.h> + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i?86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + hppa*:OpenBSD:*:*) + echo hppa-unknown-openbsd + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*X-MP:*:*:*) + echo xmp-cray-unicos + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY-2:*:*:*) + echo cray2-cray-unicos + exit 0 ;; + F300:UNIX_System_V:*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + F301:UNIX_System_V:*:*) + echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + i?86:BSD/386:*:* | i?86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i386-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + *:Linux:*:*) + + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + ld_help_string=`cd /; ld --help 2>&1` + ld_supported_emulations=`echo $ld_help_string \ + | sed -ne '/supported emulations:/!d + s/[ ][ ]*/ /g + s/.*supported emulations: *// + s/ .*// + p'` + case "$ld_supported_emulations" in + *ia64) + echo "${UNAME_MACHINE}-unknown-linux" + exit 0 + ;; + i?86linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 + ;; + elf_i?86) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + i?86coff) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 + ;; + sparclinux) + echo "${UNAME_MACHINE}-unknown-linux-gnuaout" + exit 0 + ;; + armlinux) + echo "${UNAME_MACHINE}-unknown-linux-gnuaout" + exit 0 + ;; + elf32arm*) + echo "${UNAME_MACHINE}-unknown-linux-gnuoldld" + exit 0 + ;; + armelf_linux*) + echo "${UNAME_MACHINE}-unknown-linux-gnu" + exit 0 + ;; + m68klinux) + echo "${UNAME_MACHINE}-unknown-linux-gnuaout" + exit 0 + ;; + elf32ppc | elf32ppclinux) + # Determine Lib Version + cat >$dummy.c <<EOF +#include <features.h> +#if defined(__GLIBC__) +extern char __libc_version[]; +extern char __libc_release[]; +#endif +main(argc, argv) + int argc; + char *argv[]; +{ +#if defined(__GLIBC__) + printf("%s %s\n", __libc_version, __libc_release); +#else + printf("unkown\n"); +#endif + return 0; +} +EOF + LIBC="" + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null + if test "$?" = 0 ; then + ./$dummy | grep 1\.99 > /dev/null + if test "$?" = 0 ; then + LIBC="libc1" + fi + fi + rm -f $dummy.c $dummy + echo powerpc-unknown-linux-gnu${LIBC} + exit 0 + ;; + shelf_linux) + echo "${UNAME_MACHINE}-unknown-linux-gnu" + exit 0 + ;; + esac + + if test "${UNAME_MACHINE}" = "alpha" ; then + cat <<EOF >$dummy.s + .data + \$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + + .text + .globl main + .align 4 + .ent main + main: + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit + .end main +EOF + LIBC="" + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null + if test "$?" = 0 ; then + case `./$dummy` in + 0-0) + UNAME_MACHINE="alpha" + ;; + 1-0) + UNAME_MACHINE="alphaev5" + ;; + 1-1) + UNAME_MACHINE="alphaev56" + ;; + 1-101) + UNAME_MACHINE="alphapca56" + ;; + 2-303) + UNAME_MACHINE="alphaev6" + ;; + 2-307) + UNAME_MACHINE="alphaev67" + ;; + esac + + objdump --private-headers $dummy | \ + grep ld.so.1 > /dev/null + if test "$?" = 0 ; then + LIBC="libc1" + fi + fi + rm -f $dummy.s $dummy + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 + elif test "${UNAME_MACHINE}" = "mips" ; then + cat >$dummy.c <<EOF +#ifdef __cplusplus +#include <stdio.h> /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif +#ifdef __MIPSEB__ + printf ("%s-unknown-linux-gnu\n", argv[1]); +#endif +#ifdef __MIPSEL__ + printf ("%sel-unknown-linux-gnu\n", argv[1]); +#endif + return 0; +} +EOF + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + elif test "${UNAME_MACHINE}" = "s390"; then + echo s390-ibm-linux && exit 0 + elif test "${UNAME_MACHINE}" = "x86_64"; then + echo x86_64-unknown-linux-gnu && exit 0 + else + # Either a pre-BFD a.out linker (linux-gnuoldld) + # or one that does not give us useful --help. + # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. + # If ld does not provide *any* "supported emulations:" + # that means it is gnuoldld. + echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" + test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 + + case "${UNAME_MACHINE}" in + i?86) + VENDOR=pc; + ;; + *) + VENDOR=unknown; + ;; + esac + # Determine whether the default compiler is a.out or elf + cat >$dummy.c <<EOF +#include <features.h> +#ifdef __cplusplus +#include <stdio.h> /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif +#ifdef __ELF__ +# ifdef __GLIBC__ +# if __GLIBC__ >= 2 + printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +#else + printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); +#endif + return 0; +} +EOF + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + fi ;; +# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions +# are messed up and put the nodename in both sysname and nodename. + i?86:DYNIX/ptx:4*:*) + echo i386-sequent-sysv4 + exit 0 ;; + i?86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i?86:*:5:7*) + # Fixed at (any) Pentium or better + UNAME_MACHINE=i586 + if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then + echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} + fi + exit 0 ;; + i?86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` + echo ${UNAME_MACHINE}-pc-isc$UNAME_REL + elif /bin/uname -X 2>/dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` + (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + i?86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says <Richard.M.Bartel@ccMail.Census.GOV> + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes <hewes@openmarket.com>. + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + echo `uname -p`-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + if test "${UNAME_MACHINE}" = "x86pc"; then + UNAME_MACHINE=pc + fi + echo `uname -p`-${UNAME_MACHINE}-nto-qnx + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-[KW]:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +cat >$dummy.c <<EOF +#ifdef _SEQUENT_ +# include <sys/types.h> +# include <sys/utsname.h> +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include <sys/param.h> + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +#if !defined (ultrix) + printf ("vax-dec-bsd\n"); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0 +rm -f $dummy.c $dummy + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 <<EOF +$0: unable to guess system type + +The $version version of this script cannot recognize your system type. +Please download the most up to date version of the config scripts: + + ftp://ftp.gnu.org/pub/gnu/config/ + +If the version you run ($0) is already up to date, please +send the following data and any information you think might be +pertinent to <config-patches@gnu.org> in order to provide the needed +information to handle your system. + +config.guess version = $version + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "version='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/bdb/dist/config.hin b/bdb/dist/config.hin new file mode 100644 index 00000000000..d153bc0f872 --- /dev/null +++ b/bdb/dist/config.hin @@ -0,0 +1,231 @@ +/* config.hin. Generated automatically from configure.in by autoheader. */ + +/* Define to empty if the keyword does not work. */ +#undef const + +/* Define if your struct stat has st_blksize. */ +#undef HAVE_ST_BLKSIZE + +/* Define to `int' if <sys/types.h> doesn't define. */ +#undef mode_t + +/* Define to `long' if <sys/types.h> doesn't define. */ +#undef off_t + +/* Define to `int' if <sys/types.h> doesn't define. */ +#undef pid_t + +/* Define to `unsigned' if <sys/types.h> doesn't define. */ +#undef size_t + +/* Define if the `S_IS*' macros in <sys/stat.h> do not work properly. */ +#undef STAT_MACROS_BROKEN + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define if you can safely include both <sys/time.h> and <time.h>. */ +#undef TIME_WITH_SYS_TIME + +/* Define if your processor stores words with the most significant + byte first (like Motorola and SPARC, unlike Intel and VAX). */ +#undef WORDS_BIGENDIAN + +/* Define if you are building a version for running the test suite. */ +#undef CONFIG_TEST + +/* Define if you want a debugging version. */ +#undef DEBUG + +/* Define if you want a version that logs read operations. */ +#undef DEBUG_ROP + +/* Define if you want a version that logs write operations. */ +#undef DEBUG_WOP + +/* Define if you want a version with run-time diagnostic checking. */ +#undef DIAGNOSTIC + +/* Define if you want to mask harmless unitialized memory read/writes. */ +#undef UMRW + +/* Define if fcntl/F_SETFD denies child access to file descriptors. */ +#undef HAVE_FCNTL_F_SETFD + +/* Define if building big-file environment (e.g., AIX, HP/UX, Solaris). */ +#undef HAVE_FILE_OFFSET_BITS + +/* Mutex possibilities. */ +#undef HAVE_MUTEX_68K_GCC_ASSEMBLY +#undef HAVE_MUTEX_AIX_CHECK_LOCK +#undef HAVE_MUTEX_ALPHA_GCC_ASSEMBLY +#undef HAVE_MUTEX_HPPA_GCC_ASSEMBLY +#undef HAVE_MUTEX_HPPA_MSEM_INIT +#undef HAVE_MUTEX_IA64_GCC_ASSEMBLY +#undef HAVE_MUTEX_MACOS +#undef HAVE_MUTEX_MSEM_INIT +#undef HAVE_MUTEX_PPC_GCC_ASSEMBLY +#undef HAVE_MUTEX_PTHREADS +#undef HAVE_MUTEX_RELIANTUNIX_INITSPIN +#undef HAVE_MUTEX_SCO_X86_CC_ASSEMBLY +#undef HAVE_MUTEX_SEMA_INIT +#undef HAVE_MUTEX_SGI_INIT_LOCK +#undef HAVE_MUTEX_SOLARIS_LOCK_TRY +#undef HAVE_MUTEX_SOLARIS_LWP +#undef HAVE_MUTEX_SPARC_GCC_ASSEMBLY +#undef HAVE_MUTEX_THREADS +#undef HAVE_MUTEX_UI_THREADS +#undef HAVE_MUTEX_UTS_CC_ASSEMBLY +#undef HAVE_MUTEX_VMS +#undef HAVE_MUTEX_VXWORKS +#undef HAVE_MUTEX_WIN16 +#undef HAVE_MUTEX_WIN32 +#undef HAVE_MUTEX_X86_GCC_ASSEMBLY + +/* Define if building on QNX. */ +#undef HAVE_QNX + +/* Define if building RPC client/server. */ +#undef HAVE_RPC + +/* Define if your sprintf returns a pointer, not a length. */ +#undef SPRINTF_RET_CHARPNT + +/* Define if you have the getcwd function. */ +#undef HAVE_GETCWD + +/* Define if you have the getopt function. */ +#undef HAVE_GETOPT + +/* Define if you have the getuid function. */ +#undef HAVE_GETUID + +/* Define if you have the memcmp function. */ +#undef HAVE_MEMCMP + +/* Define if you have the memcpy function. */ +#undef HAVE_MEMCPY + +/* Define if you have the memmove function. */ +#undef HAVE_MEMMOVE + +/* Define if you have the mlock function. */ +#undef HAVE_MLOCK + +/* Define if you have the mmap function. */ +#undef HAVE_MMAP + +/* Define if you have the munlock function. */ +#undef HAVE_MUNLOCK + +/* Define if you have the munmap function. */ +#undef HAVE_MUNMAP + +/* Define if you have the pread function. */ +#undef HAVE_PREAD + +/* Define if you have the pstat_getdynamic function. */ +#undef HAVE_PSTAT_GETDYNAMIC + +/* Define if you have the pwrite function. */ +#undef HAVE_PWRITE + +/* Define if you have the qsort function. */ +#undef HAVE_QSORT + +/* Define if you have the raise function. */ +#undef HAVE_RAISE + +/* Define if you have the sched_yield function. */ +#undef HAVE_SCHED_YIELD + +/* Define if you have the select function. */ +#undef HAVE_SELECT + +/* Define if you have the shmget function. */ +#undef HAVE_SHMGET + +/* Define if you have the snprintf function. */ +#undef HAVE_SNPRINTF + +/* Define if you have the strcasecmp function. */ +#undef HAVE_STRCASECMP + +/* Define if you have the strerror function. */ +#undef HAVE_STRERROR + +/* Define if you have the strtoul function. */ +#undef HAVE_STRTOUL + +/* Define if you have the sysconf function. */ +#undef HAVE_SYSCONF + +/* Define if you have the vsnprintf function. */ +#undef HAVE_VSNPRINTF + +/* Define if you have the yield function. */ +#undef HAVE_YIELD + +/* Define if you have the <dirent.h> header file. */ +#undef HAVE_DIRENT_H + +/* Define if you have the <ndir.h> header file. */ +#undef HAVE_NDIR_H + +/* Define if you have the <sys/dir.h> header file. */ +#undef HAVE_SYS_DIR_H + +/* Define if you have the <sys/ndir.h> header file. */ +#undef HAVE_SYS_NDIR_H + +/* Define if you have the <sys/select.h> header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define if you have the <sys/time.h> header file. */ +#undef HAVE_SYS_TIME_H + +/* Define if you have the nsl library (-lnsl). */ +#undef HAVE_LIBNSL + +/* + * Big-file configuration. + */ +#ifdef HAVE_FILE_OFFSET_BITS +#define _FILE_OFFSET_BITS 64 +#endif + +/* + * Don't step on the namespace. Other libraries may have their own + * implementations of these functions, we don't want to use their + * implementations or force them to use ours based on the load order. + */ +#ifndef HAVE_GETCWD +#define getcwd __db_Cgetcwd +#endif +#ifndef HAVE_GETOPT +#define getopt __db_Cgetopt +#endif +#ifndef HAVE_MEMCMP +#define memcmp __db_Cmemcmp +#endif +#ifndef HAVE_MEMCPY +#define memcpy __db_Cmemcpy +#endif +#ifndef HAVE_MEMMOVE +#define memmove __db_Cmemmove +#endif +#ifndef HAVE_RAISE +#define raise __db_Craise +#endif +#ifndef HAVE_SNPRINTF +#define snprintf __db_Csnprintf +#endif +#ifndef HAVE_STRCASECMP +#define strcasecmp __db_Cstrcasecmp +#endif +#ifndef HAVE_STRERROR +#define strerror __db_Cstrerror +#endif +#ifndef HAVE_VSNPRINTF +#define vsnprintf __db_Cvsnprintf +#endif diff --git a/bdb/dist/config.sub b/bdb/dist/config.sub new file mode 100755 index 00000000000..42fc991d08a --- /dev/null +++ b/bdb/dist/config.sub @@ -0,0 +1,1328 @@ +#! /bin/sh +# Configuration validation subroutine script, version 1.1. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 +# Free Software Foundation, Inc. + +version='2000-09-11' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Please send patches to <config-patches@gnu.org>. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -V, --version print version number, then exit" + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case "$1" in + --version | --vers* | -V ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + exec >&2 + echo "$me: invalid option $1" + echo "$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ + | arme[lb] | armv[2345] | armv[345][lb] | pyramid | mn10200 | mn10300 | tron | a29k \ + | 580 | i960 | h8300 \ + | x86 | ppcbe | mipsbe | mipsle | shbe | shle | armbe | armle \ + | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ + | hppa64 \ + | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \ + | alphaev6[78] \ + | we32k | ns16k | clipper | i370 | sh | sh[34] \ + | powerpc | powerpcle \ + | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \ + | mips64orion | mips64orionel | mipstx39 | mipstx39el \ + | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ + | mips64vr5000 | miprs64vr5000el | mcore \ + | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ + | thumb | d10v | d30v | fr30 | avr) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i[234567]86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + # FIXME: clean up the formatting here. + vax-* | tahoe-* | i[234567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ + | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ + | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ + | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ + | xmp-* | ymp-* \ + | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* | armbe-* | armle-* \ + | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \ + | hppa2.0n-* | hppa64-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \ + | alphaev6[78]-* \ + | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ + | clipper-* | orion-* \ + | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ + | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ + | mips64el-* | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ + | mipstx39-* | mipstx39el-* | mcore-* \ + | f301-* | armv*-* | s390-* | sv1-* | t3e-* \ + | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ + | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* \ + | bs2000-* | tic54x-* | c54x-* | x86_64-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | ymp) + basic_machine=ymp-cray + os=-unicos + ;; + cray2) + basic_machine=cray2-cray + os=-unicos + ;; + [ctj]90-cray) + basic_machine=c90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i[34567]86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i[34567]86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i[34567]86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i[34567]86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + i386-go32 | go32) + basic_machine=i386-unknown + os=-go32 + ;; + i386-mingw32 | mingw32) + basic_machine=i386-unknown + os=-mingw32 + ;; + i[34567]86-pw32 | pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mipsel*-linux*) + basic_machine=mipsel-unknown + os=-linux-gnu + ;; + mips*-linux*) + basic_machine=mips-unknown + os=-linux-gnu + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + msdos) + basic_machine=i386-unknown + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexen) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexen-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=rs6000-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sparclite-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=t3e-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xmp) + basic_machine=xmp-cray + os=-unicos + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + mips) + if [ x$os = x-linux-gnu ]; then + basic_machine=mips-unknown + else + basic_machine=mips-mips + fi + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4) + base_machine=sh-unknown + ;; + sparc | sparcv9) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + c4x*) + basic_machine=c4x-none + os=-coff + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i[34567]86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto*) + os=-nto-qnx + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -*MiNT) + os=-mint + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f301-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -*MiNT) + vendor=atari + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "version='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/bdb/dist/configure.in b/bdb/dist/configure.in new file mode 100644 index 00000000000..6c2a0c5d0bf --- /dev/null +++ b/bdb/dist/configure.in @@ -0,0 +1,501 @@ +dnl $Id: configure.in,v 11.77 2001/01/18 19:05:25 bostic Exp $ +dnl Process this file with autoconf to produce a configure script. + +AC_INIT(../db/db.c) +AC_CONFIG_HEADER(db_config.h:config.hin) + +dnl Configure setup. +AC_PROG_INSTALL() +AC_CANONICAL_HOST +AC_ARG_PROGRAM() + +dnl We cannot build in the top-level directory. +AC_MSG_CHECKING(if building in the top-level directory) +[ test -d db_archive ] && AC_MSG_ERROR([ +Berkeley DB cannot be built in the top-level distribution directory.]) +AC_MSG_RESULT(no) + +dnl Substitution variables. +AC_SUBST(ADDITIONAL_INCS) +AC_SUBST(ADDITIONAL_LANG) +AC_SUBST(ADDITIONAL_LIBS) +AC_SUBST(ADDITIONAL_OBJS) +AC_SUBST(ADDITIONAL_PROGS) +AC_SUBST(CFLAGS) +AC_SUBST(CPPFLAGS) +AC_SUBST(CXX) +AC_SUBST(CXXFLAGS) +AC_SUBST(DBS_LIBS) +AC_SUBST(DEFAULT_INSTALL) +AC_SUBST(DEFAULT_LIB) +AC_SUBST(INSTALLER) +AC_SUBST(INSTALL_LIBS) +AC_SUBST(JAR) +AC_SUBST(JAVAC) +AC_SUBST(JAVACFLAGS) +AC_SUBST(LDFLAGS) +AC_SUBST(LIBDB_ARGS) +AC_SUBST(LIBJSO_LIBS) +AC_SUBST(LIBS) +AC_SUBST(LIBSO_LIBS) +AC_SUBST(LIBTOOL) +AC_SUBST(LIBTSO_LIBS) +AC_SUBST(LIBXSO_LIBS) +AC_SUBST(MAKEFILE_CC) +AC_SUBST(MAKEFILE_CCLINK) +AC_SUBST(MAKEFILE_CXX) +AC_SUBST(POSTLINK) +AC_SUBST(RPC_OBJS) +AC_SUBST(SOFLAGS) +AC_SUBST(SOLINK) +AC_SUBST(SOSUFFIX) + +dnl $o is set to ".o" or ".lo", and is the file suffix used in the +dnl Makefile instead of .o +AC_SUBST(o) +o=.o +INSTALLER="\$(cp)" +DEFAULT_LIB="\$(libdb)" +DEFAULT_INSTALL="install_static" + +dnl Set the version. +AM_VERSION_SET + +dnl Set the default installation location. +AC_PREFIX_DEFAULT(/usr/local/BerkeleyDB.@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@) + +dnl Process all options before using them. This is necessary because there +dnl are dependencies among them. +AM_OPTIONS_SET + +dnl This is where we handle stuff that autoconf can't handle: compiler, +dnl preprocessor and load flags, libraries that the standard tests don't +dnl look for. The default optimization is -O. We would like to set the +dnl default optimization for systems using gcc to -O2, but we can't. By +dnl the time we know we're using gcc, it's too late to set optimization +dnl flags. +dnl +dnl There are additional libraries we need for some compiler/architecture +dnl combinations. +dnl +dnl Some architectures require DB to be compiled with special flags and/or +dnl libraries for threaded applications +dnl +dnl The makefile CC may be different than the CC used in config testing, +dnl because the makefile CC may be set to use $(LIBTOOL). +dnl +dnl XXX +dnl Don't override anything if it's already set from the environment. +optimize_def="-O" +case "$host_os" in +aix4.*) optimize_def="-O2" + CC=${CC-"xlc_r"} + CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS" + LIBTSO_LIBS="\$(LIBS)";; +bsdi3*) CC=${CC-"shlicc2"} + optimize_def="-O2" + LIBS="-lipc $LIBS";; +bsdi*) optimize_def="-O2";; +freebsd*) optimize_def="-O2" + CPPFLAGS="-D_THREAD_SAFE $CPPFLAGS" + LIBS="-pthread";; +hpux*) CPPFLAGS="-D_REENTRANT $CPPFLAGS";; +irix*) optimize_def="-O2" + CPPFLAGS="-D_SGI_MP_SOURCE $CPPFLAGS";; +linux*) optimize_def="-O2" + CFLAGS="-D_GNU_SOURCE" + CPPFLAGS="-D_REENTRANT $CPPFLAGS";; +mpeix*) CPPFLAGS="-D_POSIX_SOURCE -D_SOCKET_SOURCE $CPPFLAGS" + LIBS="-lsocket -lsvipc $LIBS";; +osf*) CPPFLAGS="-D_REENTRANT $CPPFLAGS";; +*qnx) AC_DEFINE(HAVE_QNX);; +sco3.2v4*) CC=${CC-"cc -belf"} + LIBS="-lsocket -lnsl_s $LIBS";; +sco*) CC=${CC-"cc -belf"} + LIBS="-lsocket -lnsl $LIBS";; +solaris*) CPPFLAGS="-D_REENTRANT $CPPFLAGS";; +esac + +dnl Set CFLAGS/CXXFLAGS. We MUST set the flags before we call autoconf +dnl compiler configuration macros, because if we don't, they set CFLAGS +dnl to no optimization and -g, which isn't what we want. +CFLAGS=${CFLAGS-$optimize_def} +CXXFLAGS=${CXXFLAGS-"$CFLAGS"} + +dnl If the user wants a debugging environment, add -g to the CFLAGS value. +dnl +dnl XXX +dnl Some compilers can't mix optimizing and debug flags. The only way to +dnl handle this is to specify CFLAGS in the environment before configuring. +if test "$db_cv_debug" = yes; then + AC_DEFINE(DEBUG) + CFLAGS="$CFLAGS -g" + CXXFLAGS="$CXXFLAGS -g" +fi + +dnl The default compiler is cc (NOT gcc), the default CFLAGS is as specified +dnl above, NOT what is set by AC_PROG_CC, as it won't set optimization flags. +dnl We still call AC_PROG_CC so that we get the other side-effects. +AC_CHECK_PROG(CC, cc, cc) +AC_CHECK_PROG(CC, gcc, gcc) +AC_PROG_CC + +dnl Because of dynamic library building, the ${CC} used for config tests +dnl may be different than the ${CC} we want to put in the Makefile. +dnl The latter is known as ${MAKEFILE_CC} in this script. +MAKEFILE_CC=${CC} +MAKEFILE_CCLINK="\$(CC)" +MAKEFILE_CXX="nocxx" + +dnl Set some #defines based on configuration options. +if test "$db_cv_diagnostic" = yes; then + AC_DEFINE(DIAGNOSTIC) +fi +if test "$db_cv_debug_rop" = yes; then + AC_DEFINE(DEBUG_ROP) +fi +if test "$db_cv_debug_wop" = yes; then + AC_DEFINE(DEBUG_WOP) +fi +if test "$db_cv_umrw" = yes; then + AC_DEFINE(UMRW) +fi +if test "$db_cv_test" = yes; then + AC_DEFINE(CONFIG_TEST) +fi + +dnl See if we need the C++ compiler at all. If so, we'd like to find one that +dnl interoperates with the C compiler we chose. Since we prefered cc over gcc, +dnl we'll also prefer the vendor's compiler over g++/gcc. If we're wrong, the +dnl user can set CC and CXX in their environment before running configure. +dnl +dnl AC_PROG_CXX sets CXX, but it uses $CXX and $CCC (in that order) as its +dnl first choices. +if test "$db_cv_cxx" = "yes"; then + if test "$GCC" != "yes"; then + case "$host_os" in + aix*) AC_CHECK_PROG(CCC, xlC_r, xlC_r);; + hpux*) AC_CHECK_PROG(CCC, aCC, aCC);; + osf*) AC_CHECK_PROG(CCC, cxx, cxx);; + solaris*) AC_CHECK_PROG(CCC, CC, CC);; + esac + fi + AC_PROG_CXX + MAKEFILE_CXX=${CXX} +fi + +dnl XXX +dnl Versions of GCC up to 2.8.0 required -fhandle-exceptions, but it is +dnl renamed as -fexceptions and is the default in versions 2.8.0 and after. +dnl +dnl $GXX may be set as a result of enabling C++ or Java. +if test "$GXX" = "yes"; then + CXXVERSION=`${MAKEFILE_CXX} --version` + case ${CXXVERSION} in + 1.*|2.[[01234567]].*|*-1.*|*-2.[[01234567]].* ) + CXXFLAGS="-fhandle-exceptions $CXXFLAGS";; + * ) CXXFLAGS="-fexceptions $CXXFLAGS";; + esac +fi + +dnl Export our compiler preferences for the libtool configuration. +export CC CCC +CCC=CXX + +dnl Dynamic library and libtool configuration; optional, but required for +dnl Tcl or Java support. +LIBDB_ARGS="libdb.a" +LIBTOOL="nolibtool" +POSTLINK="@true" +SOSUFFIX="so" +if test "$db_cv_dynamic" = "yes"; then + SAVE_CC="${MAKEFILE_CC}" + SAVE_CXX="${MAKEFILE_CXX}" + + # Configure libtool. + AC_MSG_CHECKING(libtool configuration) + AC_MSG_RESULT([]) + ${CONFIG_SHELL-/bin/sh} $srcdir/ltconfig \ + --no-verify $srcdir/ltmain.sh \ + --output=./libtool $host_os \ + --disable-static \ + || AC_MSG_ERROR([libtool configure failed]) + + SOSUFFIX=`sed -e '/^library_names_spec=/!d' -e 's/.*\.\([[a-zA-Z0-9_]]*\).*/\1/' ./libtool` + DEFAULT_LIB="\$(libso_target)" + DEFAULT_INSTALL="install_dynamic" + LIBDB_ARGS="\$(libso_linkname)" + LIBTOOL="\$(SHELL) ./libtool" + + MAKEFILE_CC="\$(LIBTOOL) --mode=compile ${SAVE_CC}" + MAKEFILE_CXX="\$(LIBTOOL) --mode=compile ${SAVE_CXX}" + MAKEFILE_CCLINK="\$(LIBTOOL) --mode=link ${SAVE_CC}" + + INSTALLER="\$(LIBTOOL) --mode=install cp" + POSTLINK="\$(LIBTOOL) --mode=execute true" + SOLINK="\$(LIBTOOL) --mode=link ${SAVE_CC} -avoid-version" + SOFLAGS="-rpath \$(libdir)" + o=".lo" +fi + +dnl Optional C++ API. +if test "$db_cv_cxx" = "yes"; then + if test "$db_cv_dynamic" = "yes"; then + ADDITIONAL_LIBS="$ADDITIONAL_LIBS \$(libxso_target)" + DEFAULT_INSTALL="${DEFAULT_INSTALL} install_dynamic_cxx" + else + ADDITIONAL_LIBS="$ADDITIONAL_LIBS \$(libcxx)" + DEFAULT_INSTALL="${DEFAULT_INSTALL} install_static_cxx" + fi +fi + +dnl Optional Java API. +if test "$db_cv_java" = "yes"; then + if test "$db_cv_dynamic" != "yes"; then + AC_MSG_ERROR([--enable-java requires --enable-dynamic]) + fi + + AC_CHECK_PROG(JAVAC, javac, javac, nojavac) + if test "$JAVAC" = "nojavac"; then + AC_MSG_ERROR([no javac compiler in PATH]) + fi + AC_CHECK_PROG(JAR, jar, jar, nojar) + if test "$JAR" = "nojar"; then + AC_MSG_ERROR([no jar utility in PATH]) + fi + AC_PATH_PROG(JAVACABS, javac, nojavac) + ADDITIONAL_LIBS="$ADDITIONAL_LIBS \$(libjso_target)" + ADDITIONAL_LANG="$ADDITIONAL_LANG java" + DEFAULT_INSTALL="${DEFAULT_INSTALL} install_java" + +dnl find the include directory relative to the javac executable + while ls -ld "$JAVACABS" 2>/dev/null | grep " -> " >/dev/null; do + AC_MSG_CHECKING(symlink for $JAVACABS) + JAVACLINK=`ls -ld $JAVACABS | sed 's/.* -> //'` + case "$JAVACLINK" in + /*) JAVACABS="$JAVACLINK";; +dnl 'X' avoids triggering unwanted echo options. + *) JAVACABS=`echo "X$JAVACABS" | sed -e 's/^X//' -e 's:[[^/]]*$::'`"$JAVACLINK";; + esac + AC_MSG_RESULT($JAVACABS) + done + JTOPDIR=`echo "$JAVACABS" | sed -e 's://*:/:g' -e 's:/[[^/]]*$::'` + if test -f "$JTOPDIR/include/jni.h"; then + CPPFLAGS="$CPPFLAGSS -I$JTOPDIR/include" + else + JTOPDIR=`echo "$JTOPDIR" | sed -e 's:/[[^/]]*$::'` + if test -f "$JTOPDIR/include/jni.h"; then + CPPFLAGS="$CPPFLAGS -I$JTOPDIR/include" + else + AC_MSG_ERROR([cannot find java include files]) + fi + fi + +dnl get the likely subdirectories for system specific java includes + case "$host_os" in + solaris*) JINCSUBDIRS="solaris";; + linux*) JINCSUBDIRS="linux genunix";; + *) JINCSUBDIRS="genunix";; + esac + + for JINCSUBDIR in $JINCSUBDIRS + do + if test -d "$JTOPDIR/include/$JINCSUBDIR"; then + CPPFLAGS="$CPPFLAGS -I$JTOPDIR/include/$JINCSUBDIR" + fi + done +else + JAVAC=nojavac +fi + +dnl Optional RPC client/server. +if test "$db_cv_rpc" = "yes"; then + AC_DEFINE(HAVE_RPC) + + RPC_OBJS="\$(RPC_OBJS)" + ADDITIONAL_PROGS="berkeley_db_svc $ADDITIONAL_PROGS" + + case "$host_os" in + hpux*) + AC_CHECK_FUNC(svc_run,, + AC_CHECK_LIB(nsl, svc_run, + LIBS="-lnsl $LIBS"; LIBTSO_LIBS="-lnsl $LIBTSO_LIBS"));; + solaris*) + AC_CHECK_FUNC(svc_run,, AC_CHECK_LIB(nsl, svc_run));; + esac +fi + +AM_TCL_LOAD + +dnl Optional DB 1.85 compatibility API. +if test "$db_cv_compat185" = "yes"; then + ADDITIONAL_INCS="db_185.h $ADDITIONAL_INCS" + ADDITIONAL_OBJS="db185${o} $ADDITIONAL_OBJS" +fi + +dnl Optional utilities. +if test "$db_cv_dump185" = "yes"; then + ADDITIONAL_PROGS="db_dump185 $ADDITIONAL_PROGS" +fi + +dnl Test Server. +dnl Include -lpthread if the library exists. +AC_CHECK_LIB(pthread, pthread_create, DBS_LIBS=-lpthread) + +dnl Checks for typedefs, structures, and system/compiler characteristics. +AC_C_BIGENDIAN +AC_C_CONST +AC_HEADER_STAT +AC_HEADER_TIME +AC_STRUCT_ST_BLKSIZE +AC_TYPE_MODE_T +AC_TYPE_OFF_T +AC_TYPE_PID_T +AC_TYPE_SIZE_T + +dnl Define any short-hand types we're missing. +AM_SHORTHAND_TYPES + +dnl Checks for header files. +AC_HEADER_DIRENT +AC_CHECK_HEADERS(sys/select.h) +AC_CHECK_HEADERS(sys/time.h) + +dnl Check for mutexes. We do this here because it changes $LIBS. +AM_DEFINE_MUTEXES + +dnl Checks for system functions for which we have replacements. +dnl +dnl XXX +dnl The only portable getcwd call is getcwd(char *, size_t), where the +dnl buffer is non-NULL -- Solaris can't handle a NULL buffer, and they +dnl deleted getwd(). +AC_REPLACE_FUNCS(getcwd getopt memcmp memcpy memmove) +AC_REPLACE_FUNCS(raise snprintf strcasecmp strerror vsnprintf) + +dnl XXX +dnl Nasty hack. AC_REPLACE_FUNCS added entries of the form xxx.o to the +dnl LIBOBJS variable. They have to be xxx.lo if we are building shared +dnl libraries. Use sed, configure already requires it. +tmp="`echo \"$LIBOBJS\" | sed \"s/\.o/${o}/g\"`" +LIBOBJS="$tmp" + +dnl Check for system functions we optionally use. +AC_CHECK_FUNCS(getuid pstat_getdynamic sysconf sched_yield strtoul yield) + +dnl Pread/pwrite. +dnl +dnl HP-UX has pread/pwrite, but it doesn't work with bigfile support. +case "$host_os" in +hpux*) + AC_MSG_WARN([pread/pwrite interfaces ignored on $host_os.]);; +*) AC_CHECK_FUNCS(pread pwrite) +esac + +dnl Check for fcntl(2) to deny child process access to file descriptors. +AC_CACHE_CHECK([for fcntl/F_SETFD], db_cv_fcntl_f_setfd, [dnl +AC_TRY_RUN([ +#include <sys/types.h> +#include <fcntl.h> +main(){exit(fcntl(1, F_SETFD, 1) == -1);}], + [db_cv_fcntl_f_setfd=yes], [db_cv_fcntl_f_setfd=no])]) +if test "$db_cv_fcntl_f_setfd" = yes; then + AC_DEFINE(HAVE_FCNTL_F_SETFD) +fi + +dnl A/UX has a broken getopt(3). +case "$host_os" in +aux*) ADDITIONAL_OBJS="getopt${o} $ADDITIONAL_OBJS";; +esac + +dnl Checks for system functions for which we don't have replacements. + +dnl We require qsort(3) and select(2). +AC_CHECK_FUNCS(qsort, , AC_MSG_ERROR([No qsort library function.])) +AC_CHECK_FUNCS(select, , AC_MSG_ERROR([No select library function.])) + +dnl Some versions of sprintf return a pointer to the first argument instead +dnl of a character count. We assume that the return value of snprintf and +dnl vsprintf etc. will be the same as sprintf, and check the easy one. +AC_CACHE_CHECK([for int type sprintf return value], db_cv_sprintf_count, [dnl +AC_TRY_RUN([main(){char buf[20]; exit(sprintf(buf, "XXX") != 3);}], + [db_cv_sprintf_count=yes], [db_cv_sprintf_count=no])]) +if test "$db_cv_sprintf_count" = no; then + AC_DEFINE(SPRINTF_RET_CHARPNT) +fi + +dnl Vendors are doing 64-bit lseek in different ways. +dnl AIX, HP/UX, Solaris and Linux all use _FILE_OFFSET_BITS +dnl to specify a "big-file" environment. +dnl +dnl You can't build C++ with big-file support on HP-UX, the include files +dnl are wrong. On Solaris 8, <fcntl.h> included with big-file support +dnl is not compatible with C++. +if test "$db_cv_bigfile" = no; then + case "$host_os" in + solaris2.8|hpux*) + if test "$db_cv_cxx" = "yes"; then + AC_MSG_WARN([Large file and C++ API support are incompatible on HP-UX]) + AC_MSG_WARN([and Solaris 8; large file support has been turned off.]) + else + AC_DEFINE(HAVE_FILE_OFFSET_BITS) + fi;; + aix*|solaris*|linux*) + AC_DEFINE(HAVE_FILE_OFFSET_BITS);; + esac +fi + +dnl Figure out how to create shared regions. +dnl +dnl First, we look for mmap. +dnl +dnl BSD/OS has mlock(2), but it doesn't work until the 4.1 release. +dnl +dnl Nextstep (version 3.3) apparently supports mmap(2) (the mmap symbol +dnl is defined in the C library) but does not support munmap(2). Don't +dnl try to use mmap if we can't find munmap. +dnl +dnl Ultrix has mmap(2), but it doesn't work. +mmap_ok=no +case "$host_os" in +bsdi3*|bsdi4.0) + AC_MSG_WARN([mlock(2) interface ignored on BSD/OS 3.X and 4.0.]) + mmap_ok=yes + AC_CHECK_FUNCS(mmap munmap, , mmap_ok=no);; +ultrix*) + AC_MSG_WARN([mmap(2) interface ignored on Ultrix.]);; +*) + mmap_ok=yes + AC_CHECK_FUNCS(mlock munlock) + AC_CHECK_FUNCS(mmap munmap, , mmap_ok=no);; +esac + +dnl Second, we look for shmget. +dnl +dnl SunOS has the shmget(2) interfaces, but there appears to be a missing +dnl #include <debug/debug.h> file, so we ignore them. +shmget_ok=no +case "$host_os" in +sunos*) + AC_MSG_WARN([shmget(2) interface ignored on SunOS.]);; +*) + shmget_ok=yes + AC_CHECK_FUNCS(shmget, , shmget_ok=no);; +esac + +dnl We require either mmap/munmap(2) or shmget(2). +if test "$mmap_ok" = no -a "$shmget_ok" = no; then + AC_MSG_WARN([Neither mmap/munmap(2) or shmget(2) library functions.]) +fi + +dnl Check for programs used in building and installation. +AM_PROGRAMS_SET + +CREATE_LIST="Makefile + include.tcl:../test/include.tcl + db.h:../include/db.src + db_int.h:../include/db_int.src" +if test "$db_cv_compat185" = "yes"; then + CREATE_LIST="${CREATE_LIST} db_185.h:../include/db_185.h" +fi +AC_OUTPUT(${CREATE_LIST}) diff --git a/bdb/dist/gen_rec.awk b/bdb/dist/gen_rec.awk new file mode 100644 index 00000000000..5953ee05120 --- /dev/null +++ b/bdb/dist/gen_rec.awk @@ -0,0 +1,475 @@ +#!/bin/sh - +# +# See the file LICENSE for redistribution information. +# +# Copyright (c) 1996, 1997, 1998, 1999, 2000 +# Sleepycat Software. All rights reserved. +# +# $Id: gen_rec.awk,v 11.26 2001/01/08 21:06:46 bostic Exp $ +# + +# This awk script generates all the log, print, and read routines for the DB +# logging. It also generates a template for the recovery functions (these +# functions must still be edited, but are highly stylized and the initial +# template gets you a fair way along the path). +# +# For a given file prefix.src, we generate a file prefix_auto.c, and a file +# prefix_auto.h that contains: +# +# external declarations for the file's functions +# defines for the physical record types +# (logical types are defined in each subsystem manually) +# structures to contain the data unmarshalled from the log. +# +# This awk script requires that five variables be set when it is called: +# +# source_file -- the C source file being created +# subsystem -- the subsystem prefix, e.g., "db" +# header_file -- the C #include file being created +# template_file -- the template file being created +# template_dir -- the directory to find the source template +# +# And stdin must be the input file that defines the recovery setup. + +BEGIN { + if (source_file == "" || subsystem == "" || + header_file == "" || template_file == "" || template_dir == "") { + print "Usage: gen_rec.awk requires five variables to be set:" + print "\tsource_file\t-- the C source file being created" + print "\tsubsystem\t-- the subsystem prefix, e.g., \"db\"" + print "\theader_file\t-- the C #include file being created" + print "\ttemplate_file\t-- the template file being created" + print "\ttemplate_dir\t-- the directory to find the source template" + exit + } + FS="[\t ][\t ]*" + CFILE=source_file + NAME=subsystem + HFILE=header_file + TFILE=template_file + TDIR=template_dir +} +/^[ ]*PREFIX/ { + prefix = $2 + num_funcs = 0; + + # Start .c file. + printf("/* Do not edit: automatically built by gen_rec.awk. */\n") \ + > CFILE + + # Start .h file, make the entire file conditional. + printf("/* Do not edit: automatically built by gen_rec.awk. */\n\n") \ + > HFILE + printf("#ifndef\t%s_AUTO_H\n#define\t%s_AUTO_H\n", prefix, prefix) \ + >> HFILE; + + # Write recovery template file headers + # This assumes we're doing DB recovery. + printf("#include \"db_config.h\"\n\n") > TFILE + printf("#ifndef NO_SYSTEM_INCLUDES\n") >> TFILE + printf("#include <sys/types.h>\n\n") >> TFILE + printf("#include <string.h>\n") >> TFILE + printf("#endif\n\n") >> TFILE + printf("#include \"db_int.h\"\n") >> TFILE + printf("#include \"db_page.h\"\n") >> TFILE + printf("#include \"%s.h\"\n", prefix) >> TFILE + printf("#include \"log.h\"\n\n") >> TFILE +} +/^[ ]*INCLUDE/ { + if ($3 == "") + printf("%s\n", $2) >> CFILE + else + printf("%s %s\n", $2, $3) >> CFILE +} +/^[ ]*(BEGIN|DEPRECATED)/ { + if (in_begin) { + print "Invalid format: missing END statement" + exit + } + in_begin = 1; + is_dbt = 0; + is_deprecated = ($1 == "DEPRECATED"); + nvars = 0; + + thisfunc = $2; + funcname = sprintf("%s_%s", prefix, $2); + + rectype = $3; + + funcs[num_funcs] = funcname; + funcs_dep[num_funcs] = is_deprecated; + ++num_funcs; +} +/^[ ]*(ARG|DBT|POINTER)/ { + vars[nvars] = $2; + types[nvars] = $3; + atypes[nvars] = $1; + modes[nvars] = $1; + formats[nvars] = $NF; + for (i = 4; i < NF; i++) + types[nvars] = sprintf("%s %s", types[nvars], $i); + + if ($1 == "ARG") + sizes[nvars] = sprintf("sizeof(%s)", $2); + else if ($1 == "POINTER") + sizes[nvars] = sprintf("sizeof(*%s)", $2); + else { # DBT + sizes[nvars] = \ + sprintf("sizeof(u_int32_t) + (%s == NULL ? 0 : %s->size)", \ + $2, $2); + is_dbt = 1; + } + nvars++; +} +/^[ ]*END/ { + if (!in_begin) { + print "Invalid format: missing BEGIN statement" + exit; + } + + # Declare the record type. + printf("\n#define\tDB_%s\t%d\n", funcname, rectype) >> HFILE + + # Structure declaration. + printf("typedef struct _%s_args {\n", funcname) >> HFILE + + # Here are the required fields for every structure + printf("\tu_int32_t type;\n\tDB_TXN *txnid;\n") >> HFILE + printf("\tDB_LSN prev_lsn;\n") >>HFILE + + # Here are the specified fields. + for (i = 0; i < nvars; i++) { + t = types[i]; + if (modes[i] == "POINTER") { + ndx = index(t, "*"); + t = substr(types[i], 0, ndx - 2); + } + printf("\t%s\t%s;\n", t, vars[i]) >> HFILE + } + printf("} __%s_args;\n\n", funcname) >> HFILE + + # Output the log, print and read functions. + if (!is_deprecated) + log_function(); + print_function(); + read_function(); + + # Recovery template + cmd = sprintf("sed -e s/PREF/%s/ -e s/FUNC/%s/ < %s/rec_ctemp >> %s", + prefix, thisfunc, TDIR, TFILE) + system(cmd); + + # Done writing stuff, reset and continue. + in_begin = 0; +} + +END { + # Print initialization routine; function prototype + printf("int __%s_init_print __P((DB_ENV *));\n", prefix) >> HFILE; + + # Create the routine to call db_add_recovery(print_fn, id) + printf("int\n__%s_init_print(dbenv)\n", prefix) >> CFILE; + printf("\tDB_ENV *dbenv;\n{\n\tint ret;\n\n") >> CFILE; + for (i = 0; i < num_funcs; i++) { + printf("\tif ((ret = __db_add_recovery(dbenv,\n") >> CFILE; + printf("\t __%s_print, DB_%s)) != 0)\n", \ + funcs[i], funcs[i]) >> CFILE; + printf("\t\treturn (ret);\n") >> CFILE; + } + printf("\treturn (0);\n}\n\n") >> CFILE; + + # Recover initialization routine + printf("int __%s_init_recover __P((DB_ENV *));\n", prefix) >> HFILE; + + # Create the routine to call db_add_recovery(func, id) + printf("int\n__%s_init_recover(dbenv)\n", prefix) >> CFILE; + printf("\tDB_ENV *dbenv;\n{\n\tint ret;\n\n") >> CFILE; + for (i = 0; i < num_funcs; i++) { + printf("\tif ((ret = __db_add_recovery(dbenv,\n") >> CFILE; + if (funcs_dep[i] == 1) + printf("\t __deprecated_recover, DB_%s)) != 0)\n", \ + funcs[i]) >> CFILE; + else + printf("\t __%s_recover, DB_%s)) != 0)\n", \ + funcs[i], funcs[i]) >> CFILE; + printf("\t\treturn (ret);\n") >> CFILE; + } + printf("\treturn (0);\n}\n\n") >> CFILE; + + # End the conditional for the HFILE + printf("#endif\n") >> HFILE; +} + +function log_function() { + # Write the log function; function prototype + printf("int __%s_log __P((", funcname) >> HFILE; + printf("DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t") >> HFILE; + for (i = 0; i < nvars; i++) { + printf(", ") >> HFILE; + if (modes[i] == "DBT") + printf("const ") >> HFILE; + printf("%s", types[i]) >> HFILE; + if (modes[i] == "DBT") + printf(" *") >> HFILE; + } + printf("));\n") >> HFILE; + + # Function declaration + printf("int\n__%s_log(dbenv, txnid, ret_lsnp, flags", \ + funcname) >> CFILE; + for (i = 0; i < nvars; i++) { + printf(",") >> CFILE; + if ((i % 6) == 0) + printf("\n\t") >> CFILE; + else + printf(" ") >> CFILE; + printf("%s", vars[i]) >> CFILE; + } + printf(")\n") >> CFILE; + + # Now print the parameters + printf("\tDB_ENV *dbenv;\n") >> CFILE; + printf("\tDB_TXN *txnid;\n\tDB_LSN *ret_lsnp;\n") >> CFILE; + printf("\tu_int32_t flags;\n") >> CFILE; + for (i = 0; i < nvars; i++) { + if (modes[i] == "DBT") + printf("\tconst %s *%s;\n", types[i], vars[i]) >> CFILE; + else + printf("\t%s %s;\n", types[i], vars[i]) >> CFILE; + } + + # Function body and local decls + printf("{\n") >> CFILE; + printf("\tDBT logrec;\n") >> CFILE; + printf("\tDB_LSN *lsnp, null_lsn;\n") >> CFILE; + if (is_dbt == 1) + printf("\tu_int32_t zero;\n") >> CFILE; + printf("\tu_int32_t rectype, txn_num;\n") >> CFILE; + printf("\tint ret;\n") >> CFILE; + printf("\tu_int8_t *bp;\n\n") >> CFILE; + + # Initialization + printf("\trectype = DB_%s;\n", funcname) >> CFILE; + printf("\tif (txnid != NULL &&\n") >> CFILE; + printf("\t TAILQ_FIRST(&txnid->kids) != NULL &&\n") >> CFILE; + printf("\t (ret = __txn_activekids(dbenv, rectype, txnid)) != 0)\n")\ + >> CFILE; + printf("\t\treturn (ret);\n") >> CFILE; + printf("\ttxn_num = txnid == NULL ? 0 : txnid->txnid;\n") >> CFILE; + printf("\tif (txnid == NULL) {\n") >> CFILE; + printf("\t\tZERO_LSN(null_lsn);\n") >> CFILE; + printf("\t\tlsnp = &null_lsn;\n") >> CFILE; + printf("\t} else\n\t\tlsnp = &txnid->last_lsn;\n") >> CFILE; + + # Malloc + printf("\tlogrec.size = sizeof(rectype) + ") >> CFILE; + printf("sizeof(txn_num) + sizeof(DB_LSN)") >> CFILE; + for (i = 0; i < nvars; i++) + printf("\n\t + %s", sizes[i]) >> CFILE; + printf(";\n\tif ((ret = ") >> CFILE; + printf(\ + "__os_malloc(dbenv, logrec.size, NULL, &logrec.data)) != 0)\n")\ + >> CFILE; + printf("\t\treturn (ret);\n\n") >> CFILE; + + # Copy args into buffer + printf("\tbp = logrec.data;\n") >> CFILE; + printf("\tmemcpy(bp, &rectype, sizeof(rectype));\n") >> CFILE; + printf("\tbp += sizeof(rectype);\n") >> CFILE; + printf("\tmemcpy(bp, &txn_num, sizeof(txn_num));\n") >> CFILE; + printf("\tbp += sizeof(txn_num);\n") >> CFILE; + printf("\tmemcpy(bp, lsnp, sizeof(DB_LSN));\n") >> CFILE; + printf("\tbp += sizeof(DB_LSN);\n") >> CFILE; + + for (i = 0; i < nvars; i ++) { + if (modes[i] == "ARG") { + printf("\tmemcpy(bp, &%s, %s);\n", \ + vars[i], sizes[i]) >> CFILE; + printf("\tbp += %s;\n", sizes[i]) >> CFILE; + } else if (modes[i] == "DBT") { + printf("\tif (%s == NULL) {\n", vars[i]) >> CFILE; + printf("\t\tzero = 0;\n") >> CFILE; + printf("\t\tmemcpy(bp, &zero, sizeof(u_int32_t));\n") \ + >> CFILE; + printf("\t\tbp += sizeof(u_int32_t);\n") >> CFILE; + printf("\t} else {\n") >> CFILE; + printf("\t\tmemcpy(bp, &%s->size, ", vars[i]) >> CFILE; + printf("sizeof(%s->size));\n", vars[i]) >> CFILE; + printf("\t\tbp += sizeof(%s->size);\n", vars[i]) \ + >> CFILE; + printf("\t\tmemcpy(bp, %s->data, %s->size);\n", \ + vars[i], vars[i]) >> CFILE; + printf("\t\tbp += %s->size;\n\t}\n", vars[i]) >> CFILE; + } else { # POINTER + printf("\tif (%s != NULL)\n", vars[i]) >> CFILE; + printf("\t\tmemcpy(bp, %s, %s);\n", vars[i], \ + sizes[i]) >> CFILE; + printf("\telse\n") >> CFILE; + printf("\t\tmemset(bp, 0, %s);\n", sizes[i]) >> CFILE; + printf("\tbp += %s;\n", sizes[i]) >> CFILE; + } + } + + # Error checking + printf("\tDB_ASSERT((u_int32_t)") >> CFILE; + printf("(bp - (u_int8_t *)logrec.data) == logrec.size);\n") >> CFILE; + + # Issue log call + # The logging system cannot call the public log_put routine + # due to mutual exclusion constraints. So, if we are + # generating code for the log subsystem, use the internal + # __log_put. + if (prefix == "log") + printf("\tret = __log_put\(dbenv, ret_lsnp, ") >> CFILE; + else + printf("\tret = log_put(dbenv, ret_lsnp, ") >> CFILE; + printf("(DBT *)&logrec, flags);\n") >> CFILE; + + # Update the transactions last_lsn + printf("\tif (txnid != NULL)\n") >> CFILE; + printf("\t\ttxnid->last_lsn = *ret_lsnp;\n") >> CFILE; + + # Free and return + printf("\t__os_free(logrec.data, logrec.size);\n") >> CFILE; + printf("\treturn (ret);\n}\n\n") >> CFILE; +} + +function print_function() { + # Write the print function; function prototype + printf("int __%s_print", funcname) >> HFILE; + printf(" __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));\n") \ + >> HFILE; + + # Function declaration + printf("int\n__%s_print(dbenv, ", funcname) >> CFILE; + printf("dbtp, lsnp, notused2, notused3)\n") >> CFILE; + printf("\tDB_ENV *dbenv;\n") >> CFILE; + printf("\tDBT *dbtp;\n") >> CFILE; + printf("\tDB_LSN *lsnp;\n") >> CFILE; + printf("\tdb_recops notused2;\n\tvoid *notused3;\n{\n") >> CFILE; + + # Locals + printf("\t__%s_args *argp;\n", funcname) >> CFILE; + printf("\tu_int32_t i;\n\tu_int ch;\n\tint ret;\n\n") >> CFILE; + + # Get rid of complaints about unused parameters. + printf("\ti = 0;\n\tch = 0;\n") >> CFILE; + printf("\tnotused2 = DB_TXN_ABORT;\n\tnotused3 = NULL;\n\n") >> CFILE; + + # Call read routine to initialize structure + printf("\tif ((ret = __%s_read(dbenv, dbtp->data, &argp)) != 0)\n", \ + funcname) >> CFILE; + printf("\t\treturn (ret);\n") >> CFILE; + + # Print values in every record + printf("\tprintf(\"[%%lu][%%lu]%s: ", funcname) >> CFILE; + printf("rec: %%lu txnid %%lx ") >> CFILE; + printf("prevlsn [%%lu][%%lu]\\n\",\n") >> CFILE; + printf("\t (u_long)lsnp->file,\n") >> CFILE; + printf("\t (u_long)lsnp->offset,\n") >> CFILE; + printf("\t (u_long)argp->type,\n") >> CFILE; + printf("\t (u_long)argp->txnid->txnid,\n") >> CFILE; + printf("\t (u_long)argp->prev_lsn.file,\n") >> CFILE; + printf("\t (u_long)argp->prev_lsn.offset);\n") >> CFILE; + + # Now print fields of argp + for (i = 0; i < nvars; i ++) { + printf("\tprintf(\"\\t%s: ", vars[i]) >> CFILE; + + if (modes[i] == "DBT") { + printf("\");\n") >> CFILE; + printf("\tfor (i = 0; i < ") >> CFILE; + printf("argp->%s.size; i++) {\n", vars[i]) >> CFILE; + printf("\t\tch = ((u_int8_t *)argp->%s.data)[i];\n", \ + vars[i]) >> CFILE; + printf("\t\tif (isprint(ch) || ch == 0xa)\n") >> CFILE; + printf("\t\t\tputchar(ch);\n") >> CFILE; + printf("\t\telse\n") >> CFILE; + printf("\t\t\tprintf(\"%%#x \", ch);\n") >> CFILE; + printf("\t}\n\tprintf(\"\\n\");\n") >> CFILE; + } else if (types[i] == "DB_LSN *") { + printf("[%%%s][%%%s]\\n\",\n", \ + formats[i], formats[i]) >> CFILE; + printf("\t (u_long)argp->%s.file,", \ + vars[i]) >> CFILE; + printf(" (u_long)argp->%s.offset);\n", \ + vars[i]) >> CFILE; + } else { + if (formats[i] == "lx") + printf("0x") >> CFILE; + printf("%%%s\\n\", ", formats[i]) >> CFILE; + if (formats[i] == "lx" || formats[i] == "lu") + printf("(u_long)") >> CFILE; + if (formats[i] == "ld") + printf("(long)") >> CFILE; + printf("argp->%s);\n", vars[i]) >> CFILE; + } + } + printf("\tprintf(\"\\n\");\n") >> CFILE; + printf("\t__os_free(argp, 0);\n") >> CFILE; + printf("\treturn (0);\n") >> CFILE; + printf("}\n\n") >> CFILE; +} + +function read_function() { + # Write the read function; function prototype + printf("int __%s_read __P((DB_ENV *, void *, ", funcname) >> HFILE; + printf("__%s_args **));\n", funcname) >> HFILE; + + # Function declaration + printf("int\n__%s_read(dbenv, recbuf, argpp)\n", funcname) >> CFILE; + + # Now print the parameters + printf("\tDB_ENV *dbenv;\n") >> CFILE; + printf("\tvoid *recbuf;\n") >> CFILE; + printf("\t__%s_args **argpp;\n", funcname) >> CFILE; + + # Function body and local decls + printf("{\n\t__%s_args *argp;\n", funcname) >> CFILE; + printf("\tu_int8_t *bp;\n") >> CFILE; + printf("\tint ret;\n") >> CFILE; + + printf("\n\tret = __os_malloc(dbenv, sizeof(") >> CFILE; + printf("__%s_args) +\n\t sizeof(DB_TXN), NULL, &argp);\n", \ + funcname) >> CFILE; + printf("\tif (ret != 0)\n\t\treturn (ret);\n") >> CFILE; + + # Set up the pointers to the txnid and the prev lsn + printf("\targp->txnid = (DB_TXN *)&argp[1];\n") >> CFILE; + + # First get the record type, prev_lsn, and txnid fields. + + printf("\tbp = recbuf;\n") >> CFILE; + printf("\tmemcpy(&argp->type, bp, sizeof(argp->type));\n") >> CFILE; + printf("\tbp += sizeof(argp->type);\n") >> CFILE; + printf("\tmemcpy(&argp->txnid->txnid, bp, ") >> CFILE; + printf("sizeof(argp->txnid->txnid));\n") >> CFILE; + printf("\tbp += sizeof(argp->txnid->txnid);\n") >> CFILE; + printf("\tmemcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));\n") >> CFILE; + printf("\tbp += sizeof(DB_LSN);\n") >> CFILE; + + # Now get rest of data. + for (i = 0; i < nvars; i ++) { + if (modes[i] == "DBT") { + printf("\tmemset(&argp->%s, 0, sizeof(argp->%s));\n", \ + vars[i], vars[i]) >> CFILE; + printf("\tmemcpy(&argp->%s.size, ", vars[i]) >> CFILE; + printf("bp, sizeof(u_int32_t));\n") >> CFILE; + printf("\tbp += sizeof(u_int32_t);\n") >> CFILE; + printf("\targp->%s.data = bp;\n", vars[i]) >> CFILE; + printf("\tbp += argp->%s.size;\n", vars[i]) >> CFILE; + } else if (modes[i] == "ARG") { + printf("\tmemcpy(&argp->%s, bp, %s%s));\n", \ + vars[i], "sizeof(argp->", vars[i]) >> CFILE; + printf("\tbp += sizeof(argp->%s);\n", vars[i]) >> CFILE; + } else { # POINTER + printf("\tmemcpy(&argp->%s, bp, ", vars[i]) >> CFILE; + printf(" sizeof(argp->%s));\n", vars[i]) >> CFILE; + printf("\tbp += sizeof(argp->%s);\n", vars[i]) >> CFILE; + } + } + + # Free and return + printf("\t*argpp = argp;\n") >> CFILE; + printf("\treturn (0);\n}\n\n") >> CFILE; +} diff --git a/bdb/dist/gen_rpc.awk b/bdb/dist/gen_rpc.awk new file mode 100644 index 00000000000..6c3bffc1aa4 --- /dev/null +++ b/bdb/dist/gen_rpc.awk @@ -0,0 +1,1482 @@ +# +# $Id: gen_rpc.awk,v 11.25 2001/01/02 20:04:55 sue Exp $ +# Awk script for generating client/server RPC code. +# +# This awk script generates most of the RPC routines for DB client/server +# use. It also generates a template for server and client procedures. These +# functions must still be edited, but are highly stylized and the initial +# template gets you a fair way along the path). +# +# This awk script requires that these variables be set when it is called: +# +# client_file -- the C source file being created for client code +# cproto_file -- the header file create for client prototypes +# ctmpl_file -- the C template file being created for client code +# sed_file -- the sed file created to alter server proc code +# server_file -- the C source file being created for server code +# sproto_file -- the header file create for server prototypes +# stmpl_file -- the C template file being created for server code +# xdr_file -- the XDR message file created +# +# And stdin must be the input file that defines the RPC setup. +BEGIN { + if (client_file == "" || cproto_file == "" || ctmpl_file == "" || + sed_file == "" || server_file == "" || + sproto_file == "" || stmpl_file == "" || xdr_file == "") { + print "Usage: gen_rpc.awk requires these variables be set:" + print "\tclient_file\t-- the client C source file being created" + print "\tcproto_file\t-- the client prototype header created" + print "\tctmpl_file\t-- the client template file being created" + print "\tsed_file\t-- the sed command file being created" + print "\tserver_file\t-- the server C source file being created" + print "\tsproto_file\t-- the server prototype header created" + print "\tstmpl_file\t-- the server template file being created" + print "\txdr_file\t-- the XDR message file being created" + error = 1; exit + } + + FS="\t\t*" + CFILE=client_file + printf("/* Do not edit: automatically built by gen_rpc.awk. */\n") \ + > CFILE + + CHFILE=cproto_file + printf("/* Do not edit: automatically built by gen_rpc.awk. */\n") \ + > CHFILE + + TFILE = ctmpl_file + printf("/* Do not edit: automatically built by gen_rpc.awk. */\n") \ + > TFILE + + SFILE = server_file + printf("/* Do not edit: automatically built by gen_rpc.awk. */\n") \ + > SFILE + + SHFILE=sproto_file + printf("/* Do not edit: automatically built by gen_rpc.awk. */\n") \ + > SHFILE + + # Server procedure template and a sed file to massage an existing + # template source file to change args. + # SEDFILE should be same name as PFILE but .c + # + PFILE = stmpl_file + SEDFILE = sed_file + printf("") > SEDFILE + printf("/* Do not edit: automatically built by gen_rpc.awk. */\n") \ + > PFILE + + XFILE = xdr_file + printf("/* Do not edit: automatically built by gen_rpc.awk. */\n") \ + > XFILE + nendlist = 1; +} +END { + printf("#endif /* HAVE_RPC */\n") >> CFILE + printf("#endif /* HAVE_RPC */\n") >> TFILE + printf("program DB_SERVERPROG {\n") >> XFILE + printf("\tversion DB_SERVERVERS {\n") >> XFILE + + for (i = 1; i < nendlist; ++i) + printf("\t\t%s;\n", endlist[i]) >> XFILE + + printf("\t} = 1;\n") >> XFILE + printf("} = 351457;\n") >> XFILE +} + +/^[ ]*BEGIN/ { + name = $2; + msgid = $3; + nofunc_code = 0; + funcvars = 0; + gen_code = 1; + ret_code = 0; + if ($4 == "NOCLNTCODE") + gen_code = 0; + if ($4 == "NOFUNC") + nofunc_code = 1; + if ($4 == "RETCODE") + ret_code = 1; + + nvars = 0; + rvars = 0; + newvars = 0; + db_handle = 0; + env_handle = 0; + dbc_handle = 0; + txn_handle = 0; + mp_handle = 0; + dbt_handle = 0; + xdr_free = 0; +} +/^[ ]*ARG/ { + rpc_type[nvars] = $2; + c_type[nvars] = $3; + pr_type[nvars] = $3; + args[nvars] = $4; + func_arg[nvars] = 0; + if (rpc_type[nvars] == "LIST") { + list_type[nvars] = $5; + } else + list_type[nvars] = 0; + + if (c_type[nvars] == "DBT *") + dbt_handle = 1; + + if (c_type[nvars] == "DB_ENV *") { + ctp_type[nvars] = "CT_ENV"; + env_handle = 1; + env_idx = nvars; + } + + if (c_type[nvars] == "DB *") { + ctp_type[nvars] = "CT_DB"; + db_handle = 1; + db_idx = nvars; + } + + if (c_type[nvars] == "DBC *") { + ctp_type[nvars] = "CT_CURSOR"; + dbc_handle = 1; + dbc_idx = nvars; + } + + if (c_type[nvars] == "DB_TXN *") { + ctp_type[nvars] = "CT_TXN"; + txn_handle = 1; + txn_idx = nvars; + } + + if (c_type[nvars] == "DB_MPOOLFILE *") { + mp_handle = 1; + mp_idx = nvars; + } + + ++nvars; +} +/^[ ]*FUNCPROT/ { + pr_type[nvars] = $2; +} +/^[ ]*FUNCARG/ { + rpc_type[nvars] = "IGNORE"; + c_type[nvars] = $2; + args[nvars] = sprintf("func%d", funcvars); + func_arg[nvars] = 1; + ++funcvars; + ++nvars; +} +/^[ ]*RET/ { + ret_type[rvars] = $2; + retc_type[rvars] = $3; + retargs[rvars] = $4; + if (ret_type[rvars] == "LIST" || ret_type[rvars] == "DBT") { + xdr_free = 1; + } + if (ret_type[rvars] == "LIST") { + retlist_type[rvars] = $5; + } else + retlist_type[rvars] = 0; + + ++rvars; +} +/^[ ]*END/ { + # + # ===================================================== + # Generate Client Nofunc code first if necessary + # NOTE: This code must be first, because we don't want any + # other code other than this function, so before we write + # out to the XDR and server files, we just generate this + # and move on if this is all we are doing. + # + if (nofunc_code == 1) { + # + # First time through, put out the general illegal function + # + if (first_nofunc == 0) { + printf("int __dbcl_rpc_illegal ") >> CHFILE + printf("__P((DB_ENV *, char *));\n") >> CHFILE + printf("int\n__dbcl_rpc_illegal(dbenv, name)\n") \ + >> CFILE + printf("\tDB_ENV *dbenv;\n\tchar *name;\n") >> CFILE + printf("{\n\t__db_err(dbenv,\n") >> CFILE + printf("\t \"%%s method meaningless in RPC") >> CFILE + printf(" environment\", name);\n") >> CFILE + printf("\treturn (__db_eopnotsup(dbenv));\n") >> CFILE + printf("}\n\n") >> CFILE + first_nofunc = 1 + } + # + # If we are doing a list, spit out prototype decl. + # + for (i = 0; i < nvars; i++) { + if (rpc_type[i] != "LIST") + continue; + printf("static int __dbcl_%s_%slist __P((", \ + name, args[i]) >> CFILE + printf("__%s_%slist **, ", name, args[i]) >> CFILE + if (list_type[i] == "STRING") + printf("%s));\n", c_type[i]) >> CFILE + if (list_type[i] == "INT") + printf("u_int32_t));\n") >> CFILE + if (list_type[i] == "ID") + printf("%s));\n", c_type[i]) >> CFILE + printf("static void __dbcl_%s_%sfree __P((", \ + name, args[i]) >> CFILE + printf("__%s_%slist **));\n", name, args[i]) >> CFILE + } + # + # Spit out PUBLIC prototypes. + # + printf("int __dbcl_%s __P((",name) >> CHFILE + sep = ""; + for (i = 0; i < nvars; ++i) { + printf("%s%s", sep, pr_type[i]) >> CHFILE + sep = ", "; + } + printf("));\n") >> CHFILE + # + # Spit out function name/args. + # + printf("int\n") >> CFILE + printf("__dbcl_%s(", name) >> CFILE + sep = ""; + for (i = 0; i < nvars; ++i) { + printf("%s%s", sep, args[i]) >> CFILE + sep = ", "; + } + printf(")\n") >> CFILE + + for (i = 0; i < nvars; ++i) + if (func_arg[i] == 0) + printf("\t%s %s;\n", c_type[i], args[i]) \ + >> CFILE + else + printf("\t%s;\n", c_type[i]) >> CFILE + + # + # Call error function and return EINVAL + # + printf("{\n") >> CFILE + + # + # If we don't have a local env, set one. + # + if (env_handle == 0) { + printf("\tDB_ENV *dbenv;\n\n") >> CFILE + if (db_handle) + printf("\tdbenv = %s->dbenv;\n", \ + args[db_idx]) >> CFILE + else if (dbc_handle) + printf("\tdbenv = %s->dbp->dbenv;\n", \ + args[dbc_idx]) >> CFILE + else if (txn_handle) + printf("\tdbenv = %s->mgrp->dbenv;\n", \ + args[txn_idx]) >> CFILE + else if (mp_handle) + printf("\tdbenv = %s->dbmp->dbenv;\n", \ + args[mp_idx]) >> CFILE + else + printf("\tdbenv = NULL;\n") >> CFILE + } + # + # Quiet the compiler for all variables. + # + # NOTE: Index 'i' starts at 1, not 0. Our first arg is + # the handle we need to get to the env, and we do not want + # to COMPQUIET that one. + for (i = 1; i < nvars; ++i) { + if (rpc_type[i] == "CONST" || rpc_type[i] == "DBT" || + rpc_type[i] == "LIST" || rpc_type[i] == "STRING") { + printf("\tCOMPQUIET(%s, NULL);\n", args[i]) \ + >> CFILE + } + if (rpc_type[i] == "INT" || rpc_type[i] == "IGNORE" || + rpc_type[i] == "ID") { + printf("\tCOMPQUIET(%s, 0);\n", args[i]) \ + >> CFILE + } + } + + if (!env_handle) { + printf("\treturn (__dbcl_rpc_illegal(dbenv, ") >> CFILE + printf("\"%s\"));\n", name) >> CFILE + } else + printf("\treturn (__dbcl_rpc_illegal(%s, \"%s\"));\n", \ + args[env_idx], name) >> CFILE + printf("}\n\n") >> CFILE + + next; + } + + # + # ===================================================== + # XDR messages. + # + printf("\n") >> XFILE + # + # If there are any lists, generate the structure to contain them. + # + for (i = 0; i < nvars; ++i) { + if (rpc_type[i] == "LIST") { + printf("struct __%s_%slist {\n", name, args[i]) >> XFILE + printf("\topaque ent<>;\n") >> XFILE + printf("\t__%s_%slist *next;\n", name, args[i]) >> XFILE + printf("};\n\n") >> XFILE + } + } + printf("struct __%s_msg {\n", name) >> XFILE + for (i = 0; i < nvars; ++i) { + if (rpc_type[i] == "ID") { + printf("\tunsigned int %scl_id;\n", args[i]) >> XFILE + } + if (rpc_type[i] == "STRING") { + printf("\tstring %s<>;\n", args[i]) >> XFILE + } + if (rpc_type[i] == "INT") { + printf("\tunsigned int %s;\n", args[i]) >> XFILE + } + if (rpc_type[i] == "DBT") { + printf("\tunsigned int %sdlen;\n", args[i]) >> XFILE + printf("\tunsigned int %sdoff;\n", args[i]) >> XFILE + printf("\tunsigned int %sflags;\n", args[i]) >> XFILE + printf("\topaque %sdata<>;\n", args[i]) >> XFILE + } + if (rpc_type[i] == "LIST") { + printf("\t__%s_%slist *%slist;\n", \ + name, args[i], args[i]) >> XFILE + } + } + printf("};\n") >> XFILE + + printf("\n") >> XFILE + # + # If there are any lists, generate the structure to contain them. + # + for (i = 0; i < rvars; ++i) { + if (ret_type[i] == "LIST") { + printf("struct __%s_%sreplist {\n", \ + name, retargs[i]) >> XFILE + printf("\topaque ent<>;\n") >> XFILE + printf("\t__%s_%sreplist *next;\n", \ + name, retargs[i]) >> XFILE + printf("};\n\n") >> XFILE + } + } + # + # Generate the reply message + # + printf("struct __%s_reply {\n", name) >> XFILE + printf("\tunsigned int status;\n") >> XFILE + for (i = 0; i < rvars; ++i) { + if (ret_type[i] == "ID") { + printf("\tunsigned int %scl_id;\n", retargs[i]) >> XFILE + } + if (ret_type[i] == "STRING") { + printf("\tstring %s<>;\n", retargs[i]) >> XFILE + } + if (ret_type[i] == "INT") { + printf("\tunsigned int %s;\n", retargs[i]) >> XFILE + } + if (ret_type[i] == "DBL") { + printf("\tdouble %s;\n", retargs[i]) >> XFILE + } + if (ret_type[i] == "DBT") { + printf("\topaque %sdata<>;\n", retargs[i]) >> XFILE + } + if (ret_type[i] == "LIST") { + printf("\t__%s_%sreplist *%slist;\n", \ + name, retargs[i], retargs[i]) >> XFILE + } + } + printf("};\n") >> XFILE + + endlist[nendlist] = \ + sprintf("__%s_reply __DB_%s(__%s_msg) = %d", \ + name, name, name, nendlist); + nendlist++; + + # + # ===================================================== + # File headers, if necessary. + # + if (first == 0) { + printf("#include \"db_config.h\"\n") >> CFILE + printf("\n") >> CFILE + printf("#ifdef HAVE_RPC\n") >> CFILE + printf("#ifndef NO_SYSTEM_INCLUDES\n") >> CFILE + printf("#include <sys/types.h>\n") >> CFILE + printf("#include <rpc/rpc.h>\n") >> CFILE + printf("#include <rpc/xdr.h>\n") >> CFILE + printf("\n") >> CFILE + printf("#include <errno.h>\n") >> CFILE + printf("#include <string.h>\n") >> CFILE + printf("#endif\n") >> CFILE + printf("#include \"db_server.h\"\n") >> CFILE + printf("\n") >> CFILE + printf("#include \"db_int.h\"\n") >> CFILE + printf("#include \"db_page.h\"\n") >> CFILE + printf("#include \"db_ext.h\"\n") >> CFILE + printf("#include \"mp.h\"\n") >> CFILE + printf("#include \"rpc_client_ext.h\"\n") >> CFILE + printf("#include \"txn.h\"\n") >> CFILE + printf("\n") >> CFILE + n = split(CHFILE, hpieces, "/"); + printf("#include \"%s\"\n", hpieces[n]) >> CFILE + printf("\n") >> CFILE + + printf("#include \"db_config.h\"\n") >> TFILE + printf("\n") >> TFILE + printf("#ifdef HAVE_RPC\n") >> TFILE + printf("#ifndef NO_SYSTEM_INCLUDES\n") >> TFILE + printf("#include <sys/types.h>\n") >> TFILE + printf("#include <rpc/rpc.h>\n") >> TFILE + printf("\n") >> TFILE + printf("#include <errno.h>\n") >> TFILE + printf("#include <string.h>\n") >> TFILE + printf("#endif\n") >> TFILE + printf("#include \"db_server.h\"\n") >> TFILE + printf("\n") >> TFILE + printf("#include \"db_int.h\"\n") >> TFILE + printf("#include \"db_page.h\"\n") >> TFILE + printf("#include \"db_ext.h\"\n") >> TFILE + printf("#include \"txn.h\"\n") >> TFILE + printf("\n") >> TFILE + n = split(CHFILE, hpieces, "/"); + printf("#include \"%s\"\n", hpieces[n]) >> TFILE + printf("\n") >> TFILE + + printf("#include \"db_config.h\"\n") >> SFILE + printf("\n") >> SFILE + printf("#ifndef NO_SYSTEM_INCLUDES\n") >> SFILE + printf("#include <sys/types.h>\n") >> SFILE + printf("\n") >> SFILE + printf("#include <rpc/rpc.h>\n") >> SFILE + printf("#include <rpc/xdr.h>\n") >> SFILE + printf("\n") >> SFILE + printf("#include <errno.h>\n") >> SFILE + printf("#include <string.h>\n") >> SFILE + printf("#endif\n") >> SFILE + printf("#include \"db_server.h\"\n") >> SFILE + printf("\n") >> SFILE + printf("#include \"db_int.h\"\n") >> SFILE + printf("#include \"db_server_int.h\"\n") >> SFILE + printf("#include \"rpc_server_ext.h\"\n") >> SFILE + printf("\n") >> SFILE + n = split(SHFILE, hpieces, "/"); + printf("#include \"%s\"\n", hpieces[n]) >> SFILE + printf("\n") >> SFILE + + printf("#include \"db_config.h\"\n") >> PFILE + printf("\n") >> PFILE + printf("#ifndef NO_SYSTEM_INCLUDES\n") >> PFILE + printf("#include <sys/types.h>\n") >> PFILE + printf("\n") >> PFILE + printf("#include <rpc/rpc.h>\n") >> PFILE + printf("\n") >> PFILE + printf("#include <errno.h>\n") >> PFILE + printf("#include <string.h>\n") >> PFILE + printf("#include \"db_server.h\"\n") >> PFILE + printf("#endif\n") >> PFILE + printf("\n") >> PFILE + printf("#include \"db_int.h\"\n") >> PFILE + printf("#include \"db_server_int.h\"\n") >> PFILE + printf("#include \"rpc_server_ext.h\"\n") >> PFILE + printf("\n") >> PFILE + n = split(SHFILE, hpieces, "/"); + printf("#include \"%s\"\n", hpieces[n]) >> PFILE + printf("\n") >> PFILE + + first = 1; + } + + # + # ===================================================== + # Server functions. + # + # If we are doing a list, send out local list prototypes. + # + for (i = 0; i < nvars; ++i) { + if (rpc_type[i] != "LIST") + continue; + if (list_type[i] != "STRING" && list_type[i] != "INT" && + list_type[i] != "ID") + continue; + printf("int __db_%s_%slist __P((", name, args[i]) >> SFILE + printf("__%s_%slist *, ", name, args[i]) >> SFILE + if (list_type[i] == "STRING") { + printf("char ***));\n") >> SFILE + } + if (list_type[i] == "INT" || list_type[i] == "ID") { + printf("u_int32_t **));\n") >> SFILE + } + printf("void __db_%s_%sfree __P((", name, args[i]) >> SFILE + if (list_type[i] == "STRING") + printf("char **));\n\n") >> SFILE + if (list_type[i] == "INT" || list_type[i] == "ID") + printf("u_int32_t *));\n\n") >> SFILE + + } + # + # First spit out PUBLIC prototypes for server functions. + # + printf("__%s_reply * __db_%s_%d __P((__%s_msg *));\n", \ + name, name, msgid, name) >> SHFILE + + printf("__%s_reply *\n", name) >> SFILE + printf("__db_%s_%d(req)\n", name, msgid) >> SFILE + printf("\t__%s_msg *req;\n", name) >> SFILE; + printf("{\n") >> SFILE + doing_list = 0; + # + # If we are doing a list, decompose it for server proc we'll call. + # + for (i = 0; i < nvars; ++i) { + if (rpc_type[i] != "LIST") + continue; + doing_list = 1; + if (list_type[i] == "STRING") + printf("\tchar **__db_%slist;\n", args[i]) >> SFILE + if (list_type[i] == "ID" || list_type[i] == "INT") + printf("\tu_int32_t *__db_%slist;\n", args[i]) >> SFILE + } + if (doing_list) + printf("\tint ret;\n") >> SFILE + printf("\tstatic __%s_reply reply; /* must be static */\n", \ + name) >> SFILE + if (xdr_free) { + printf("\tstatic int __%s_free = 0; /* must be static */\n\n", \ + name) >> SFILE + printf("\tif (__%s_free)\n", name) >> SFILE + printf("\t\txdr_free((xdrproc_t)xdr___%s_reply, (void *)&reply);\n", \ + name) >> SFILE + printf("\t__%s_free = 0;\n", name) >> SFILE + printf("\n\t/* Reinitialize allocated fields */\n") >> SFILE + for (i = 0; i < rvars; ++i) { + if (ret_type[i] == "LIST") { + printf("\treply.%slist = NULL;\n", \ + retargs[i]) >> SFILE + } + if (ret_type[i] == "DBT") { + printf("\treply.%sdata.%sdata_val = NULL;\n", \ + retargs[i], retargs[i]) >> SFILE + } + } + } + + need_out = 0; + for (i = 0; i < nvars; ++i) { + if (rpc_type[i] == "LIST") { + printf("\n\tif ((ret = __db_%s_%slist(", \ + name, args[i]) >> SFILE + printf("req->%slist, &__db_%slist)) != 0)\n", \ + args[i], args[i]) >> SFILE + printf("\t\tgoto out;\n") >> SFILE + need_out = 1; + } + } + + # + # Compose server proc to call. Decompose message components as args. + # + printf("\n\t__%s_%d_proc(", name, msgid) >> SFILE + sep = ""; + for (i = 0; i < nvars; ++i) { + if (rpc_type[i] == "ID") { + printf("%sreq->%scl_id", sep, args[i]) >> SFILE + } + if (rpc_type[i] == "STRING") { + printf("%s(*req->%s == '\\0') ? NULL : req->%s", \ + sep, args[i], args[i]) >> SFILE + } + if (rpc_type[i] == "INT") { + printf("%sreq->%s", sep, args[i]) >> SFILE + } + if (rpc_type[i] == "LIST") { + printf("%s__db_%slist", sep, args[i]) >> SFILE + } + if (rpc_type[i] == "DBT") { + printf("%sreq->%sdlen", sep, args[i]) >> SFILE + sep = ",\n\t "; + printf("%sreq->%sdoff", sep, args[i]) >> SFILE + printf("%sreq->%sflags", sep, args[i]) >> SFILE + printf("%sreq->%sdata.%sdata_val", \ + sep, args[i], args[i]) >> SFILE + printf("%sreq->%sdata.%sdata_len", \ + sep, args[i], args[i]) >> SFILE + } + sep = ",\n\t "; + } + printf("%s&reply", sep) >> SFILE + if (xdr_free) + printf("%s&__%s_free);\n", sep, name) >> SFILE + else + printf(");\n\n") >> SFILE + for (i = 0; i < nvars; ++i) { + if (rpc_type[i] == "LIST") { + printf("\t__db_%s_%sfree(__db_%slist);\n", \ + name, args[i], args[i]) >> SFILE + } + } + if (need_out) { + printf("\nout:\n") >> SFILE + } + printf("\treturn (&reply);\n") >> SFILE + printf("}\n\n") >> SFILE + + # + # If we are doing a list, write list functions for this op. + # + for (i = 0; i < nvars; ++i) { + if (rpc_type[i] != "LIST") + continue; + if (list_type[i] != "STRING" && list_type[i] != "INT" && + list_type[i] != "ID") + continue; + printf("int\n") >> SFILE + printf("__db_%s_%slist(locp, ppp)\n", name, args[i]) >> SFILE + printf("\t__%s_%slist *locp;\n", name, args[i]) >> SFILE + if (list_type[i] == "STRING") { + printf("\tchar ***ppp;\n{\n") >> SFILE + printf("\tchar **pp;\n") >> SFILE + } + if (list_type[i] == "INT" || list_type[i] == "ID") { + printf("\tu_int32_t **ppp;\n{\n") >> SFILE + printf("\tu_int32_t *pp;\n") >> SFILE + } + printf("\tint cnt, ret, size;\n") >> SFILE + printf("\t__%s_%slist *nl;\n\n", name, args[i]) >> SFILE + printf("\tfor (cnt = 0, nl = locp;") >> SFILE + printf(" nl != NULL; cnt++, nl = nl->next)\n\t\t;\n\n") >> SFILE + printf("\tif (cnt == 0) {\n") >> SFILE + printf("\t\t*ppp = NULL;\n") >> SFILE + printf("\t\treturn (0);\n\t}\n") >> SFILE + printf("\tsize = sizeof(*pp) * (cnt + 1);\n") >> SFILE + printf("\tif ((ret = __os_malloc(NULL, size, ") >> SFILE + printf("NULL, ppp)) != 0)\n") >> SFILE + printf("\t\treturn (ret);\n") >> SFILE + printf("\tmemset(*ppp, 0, size);\n") >> SFILE + printf("\tfor (pp = *ppp, nl = locp;") >> SFILE + printf(" nl != NULL; nl = nl->next, pp++) {\n") >> SFILE + if (list_type[i] == "STRING") { + printf("\t\tif ((ret = __os_malloc(NULL ,") >> SFILE + printf("nl->ent.ent_len + 1, NULL, pp)) != 0)\n") \ + >> SFILE + printf("\t\t\tgoto out;\n") >> SFILE + printf("\t\tif ((ret = __os_strdup(NULL, ") >> SFILE + printf("(char *)nl->ent.ent_val, pp)) != 0)\n") >> SFILE + printf("\t\t\tgoto out;\n") >> SFILE + } + if (list_type[i] == "INT" || list_type[i] == "ID") + printf("\t\t*pp = *(u_int32_t *)nl->ent.ent_val;\n") \ + >> SFILE + printf("\t}\n") >> SFILE + printf("\treturn (0);\n") >> SFILE + if (list_type[i] == "STRING") { + printf("out:\n") >> SFILE + printf("\t__db_%s_%sfree(*ppp);\n", \ + name, args[i]) >> SFILE + printf("\treturn (ret);\n") >> SFILE + } + printf("}\n\n") >> SFILE + + printf("void\n") >> SFILE + printf("__db_%s_%sfree(pp)\n", name, args[i]) >> SFILE + + if (list_type[i] == "STRING") + printf("\tchar **pp;\n") >> SFILE + if (list_type[i] == "INT" || list_type[i] == "ID") + printf("\tu_int32_t *pp;\n") >> SFILE + + printf("{\n") >> SFILE + printf("\tsize_t size;\n") >> SFILE + + if (list_type[i] == "STRING") + printf("\tchar **p;\n\n") >> SFILE + if (list_type[i] == "INT" || list_type[i] == "ID") + printf("\tu_int32_t *p;\n\n") >> SFILE + + printf("\tif (pp == NULL)\n\t\treturn;\n") >> SFILE + printf("\tsize = sizeof(*p);\n") >> SFILE + printf("\tfor (p = pp; *p != 0; p++) {\n") >> SFILE + printf("\t\tsize += sizeof(*p);\n") >> SFILE + + if (list_type[i] == "STRING") + printf("\t\t__os_free(*p, strlen(*p)+1);\n") >> SFILE + printf("\t}\n") >> SFILE + printf("\t__os_free(pp, size);\n") >> SFILE + printf("}\n\n") >> SFILE + } + + # + # ===================================================== + # Generate Procedure Template Server code + # + # Produce SED file commands if needed at the same time + # + # Start with PUBLIC prototypes + # + printf("void __%s_%d_proc __P((", name, msgid) >> SHFILE + sep = ""; + argcount = 0; + for (i = 0; i < nvars; ++i) { + argcount++; + split_lines(1); + if (argcount == 0) { + sep = ""; + } + if (rpc_type[i] == "IGNORE") + continue; + if (rpc_type[i] == "ID") { + printf("%slong", sep) >> SHFILE + } + if (rpc_type[i] == "STRING") { + printf("%schar *", sep) >> SHFILE + } + if (rpc_type[i] == "INT") { + printf("%su_int32_t", sep) >> SHFILE + } + if (rpc_type[i] == "LIST" && list_type[i] == "STRING") { + printf("%schar **", sep) >> SHFILE + } + if (rpc_type[i] == "LIST" && list_type[i] == "INT") { + printf("%su_int32_t *", sep) >> SHFILE + } + if (rpc_type[i] == "LIST" && list_type[i] == "ID") { + printf("%su_int32_t *", sep) >> SHFILE + } + if (rpc_type[i] == "DBT") { + printf("%su_int32_t", sep) >> SHFILE + sep = ", "; + argcount++; + split_lines(1); + if (argcount == 0) { + sep = ""; + } else { + sep = ", "; + } + printf("%su_int32_t", sep) >> SHFILE + argcount++; + split_lines(1); + if (argcount == 0) { + sep = ""; + } else { + sep = ", "; + } + printf("%su_int32_t", sep) >> SHFILE + argcount++; + split_lines(1); + if (argcount == 0) { + sep = ""; + } else { + sep = ", "; + } + printf("%svoid *", sep) >> SHFILE + argcount++; + split_lines(1); + if (argcount == 0) { + sep = ""; + } else { + sep = ", "; + } + printf("%su_int32_t", sep) >> SHFILE + } + sep = ", "; + } + printf("%s__%s_reply *", sep, name) >> SHFILE + if (xdr_free) { + printf("%sint *));\n", sep) >> SHFILE + } else { + printf("));\n") >> SHFILE + } + # + # Spit out function name and arg list + # + printf("/^\\/\\* BEGIN __%s_%d_proc/,/^\\/\\* END __%s_%d_proc/c\\\n", \ + name, msgid, name, msgid) >> SEDFILE + + printf("/* BEGIN __%s_%d_proc */\n", name, msgid) >> PFILE + printf("/* BEGIN __%s_%d_proc */\\\n", name, msgid) >> SEDFILE + printf("void\n") >> PFILE + printf("void\\\n") >> SEDFILE + printf("__%s_%d_proc(", name, msgid) >> PFILE + printf("__%s_%d_proc(", name, msgid) >> SEDFILE + sep = ""; + argcount = 0; + for (i = 0; i < nvars; ++i) { + argcount++; + split_lines(0); + if (argcount == 0) { + sep = ""; + } + if (rpc_type[i] == "IGNORE") + continue; + if (rpc_type[i] == "ID") { + printf("%s%scl_id", sep, args[i]) >> PFILE + printf("%s%scl_id", sep, args[i]) >> SEDFILE + } + if (rpc_type[i] == "STRING") { + printf("%s%s", sep, args[i]) >> PFILE + printf("%s%s", sep, args[i]) >> SEDFILE + } + if (rpc_type[i] == "INT") { + printf("%s%s", sep, args[i]) >> PFILE + printf("%s%s", sep, args[i]) >> SEDFILE + } + if (rpc_type[i] == "LIST") { + printf("%s%slist", sep, args[i]) >> PFILE + printf("%s%slist", sep, args[i]) >> SEDFILE + } + if (rpc_type[i] == "DBT") { + printf("%s%sdlen", sep, args[i]) >> PFILE + printf("%s%sdlen", sep, args[i]) >> SEDFILE + sep = ", "; + argcount++; + split_lines(0); + if (argcount == 0) { + sep = ""; + } else { + sep = ", "; + } + printf("%s%sdoff", sep, args[i]) >> PFILE + printf("%s%sdoff", sep, args[i]) >> SEDFILE + argcount++; + split_lines(0); + if (argcount == 0) { + sep = ""; + } else { + sep = ", "; + } + printf("%s%sflags", sep, args[i]) >> PFILE + printf("%s%sflags", sep, args[i]) >> SEDFILE + argcount++; + split_lines(0); + if (argcount == 0) { + sep = ""; + } else { + sep = ", "; + } + printf("%s%sdata", sep, args[i]) >> PFILE + printf("%s%sdata", sep, args[i]) >> SEDFILE + argcount++; + split_lines(0); + if (argcount == 0) { + sep = ""; + } else { + sep = ", "; + } + printf("%s%ssize", sep, args[i]) >> PFILE + printf("%s%ssize", sep, args[i]) >> SEDFILE + } + sep = ", "; + } + printf("%sreplyp",sep) >> PFILE + printf("%sreplyp",sep) >> SEDFILE + if (xdr_free) { + printf("%sfreep)\n",sep) >> PFILE + printf("%sfreep)\\\n",sep) >> SEDFILE + } else { + printf(")\n") >> PFILE + printf(")\\\n") >> SEDFILE + } + # + # Spit out arg types/names; + # + for (i = 0; i < nvars; ++i) { + if (rpc_type[i] == "ID") { + printf("\tlong %scl_id;\n", args[i]) >> PFILE + printf("\\\tlong %scl_id;\\\n", args[i]) >> SEDFILE + } + if (rpc_type[i] == "STRING") { + printf("\tchar *%s;\n", args[i]) >> PFILE + printf("\\\tchar *%s;\\\n", args[i]) >> SEDFILE + } + if (rpc_type[i] == "INT") { + printf("\tu_int32_t %s;\n", args[i]) >> PFILE + printf("\\\tu_int32_t %s;\\\n", args[i]) >> SEDFILE + } + if (rpc_type[i] == "LIST" && list_type[i] == "STRING") { + printf("\tchar ** %slist;\n", args[i]) >> PFILE + printf("\\\tchar ** %slist;\\\n", args[i]) >> SEDFILE + } + if (rpc_type[i] == "LIST" && list_type[i] == "INT") { + printf("\tu_int32_t * %slist;\n", args[i]) >> PFILE + printf("\\\tu_int32_t * %slist;\\\n", \ + args[i]) >> SEDFILE + } + if (rpc_type[i] == "LIST" && list_type[i] == "ID") { + printf("\tu_int32_t * %slist;\n", args[i]) >> PFILE + printf("\\\tu_int32_t * %slist;\\\n", args[i]) \ + >> SEDFILE + } + if (rpc_type[i] == "DBT") { + printf("\tu_int32_t %sdlen;\n", args[i]) >> PFILE + printf("\\\tu_int32_t %sdlen;\\\n", args[i]) >> SEDFILE + printf("\tu_int32_t %sdoff;\n", args[i]) >> PFILE + printf("\\\tu_int32_t %sdoff;\\\n", args[i]) >> SEDFILE + printf("\tu_int32_t %sflags;\n", args[i]) >> PFILE + printf("\\\tu_int32_t %sflags;\\\n", args[i]) >> SEDFILE + printf("\tvoid *%sdata;\n", args[i]) >> PFILE + printf("\\\tvoid *%sdata;\\\n", args[i]) >> SEDFILE + printf("\tu_int32_t %ssize;\n", args[i]) >> PFILE + printf("\\\tu_int32_t %ssize;\\\n", args[i]) >> SEDFILE + } + } + printf("\t__%s_reply *replyp;\n",name) >> PFILE + printf("\\\t__%s_reply *replyp;\\\n",name) >> SEDFILE + if (xdr_free) { + printf("\tint * freep;\n") >> PFILE + printf("\\\tint * freep;\\\n") >> SEDFILE + } + + printf("/* END __%s_%d_proc */\n", name, msgid) >> PFILE + printf("/* END __%s_%d_proc */\n", name, msgid) >> SEDFILE + + # + # Function body + # + printf("{\n") >> PFILE + printf("\tint ret;\n") >> PFILE + for (i = 0; i < nvars; ++i) { + if (rpc_type[i] == "ID") { + printf("\t%s %s;\n", c_type[i], args[i]) >> PFILE + printf("\tct_entry *%s_ctp;\n", args[i]) >> PFILE + } + } + printf("\n") >> PFILE + for (i = 0; i < nvars; ++i) { + if (rpc_type[i] == "ID") { + printf("\tACTIVATE_CTP(%s_ctp, %scl_id, %s);\n", \ + args[i], args[i], ctp_type[i]) >> PFILE + printf("\t%s = (%s)%s_ctp->ct_anyp;\n", \ + args[i], c_type[i], args[i]) >> PFILE + } + } + printf("\n\t/*\n\t * XXX Code goes here\n\t */\n\n") >> PFILE + printf("\treplyp->status = ret;\n") >> PFILE + printf("\treturn;\n") >> PFILE + printf("}\n\n") >> PFILE + + # + # If we don't want client code generated, go on to next. + # + if (gen_code == 0) + next; + + # + # ===================================================== + # Generate Client code + # + # If we are doing a list, spit out prototype decl. + # + for (i = 0; i < nvars; i++) { + if (rpc_type[i] != "LIST") + continue; + printf("static int __dbcl_%s_%slist __P((", \ + name, args[i]) >> CFILE + printf("__%s_%slist **, ", name, args[i]) >> CFILE + if (list_type[i] == "STRING") + printf("%s));\n", c_type[i]) >> CFILE + if (list_type[i] == "INT") + printf("u_int32_t));\n") >> CFILE + if (list_type[i] == "ID") + printf("%s));\n", c_type[i]) >> CFILE + printf("static void __dbcl_%s_%sfree __P((", \ + name, args[i]) >> CFILE + printf("__%s_%slist **));\n", name, args[i]) >> CFILE + } + # + # Spit out PUBLIC prototypes. + # + printf("int __dbcl_%s __P((",name) >> CHFILE + sep = ""; + for (i = 0; i < nvars; ++i) { + printf("%s%s", sep, pr_type[i]) >> CHFILE + sep = ", "; + } + printf("));\n") >> CHFILE + # + # Spit out function name/args. + # + printf("int\n") >> CFILE + printf("__dbcl_%s(", name) >> CFILE + sep = ""; + for (i = 0; i < nvars; ++i) { + printf("%s%s", sep, args[i]) >> CFILE + sep = ", "; + } + printf(")\n") >> CFILE + + for (i = 0; i < nvars; ++i) + if (func_arg[i] == 0) + printf("\t%s %s;\n", c_type[i], args[i]) >> CFILE + else + printf("\t%s;\n", c_type[i]) >> CFILE + + printf("{\n") >> CFILE + printf("\tCLIENT *cl;\n") >> CFILE + printf("\t__%s_msg req;\n", name) >> CFILE + printf("\tstatic __%s_reply *replyp = NULL;\n", name) >> CFILE; + printf("\tint ret;\n") >> CFILE + if (!env_handle) + printf("\tDB_ENV *dbenv;\n") >> CFILE + + printf("\n") >> CFILE + printf("\tret = 0;\n") >> CFILE + if (!env_handle) { + printf("\tdbenv = NULL;\n") >> CFILE + if (db_handle) + printf("\tdbenv = %s->dbenv;\n", args[db_idx]) >> CFILE + else if (dbc_handle) + printf("\tdbenv = %s->dbp->dbenv;\n", \ + args[dbc_idx]) >> CFILE + else if (txn_handle) + printf("\tdbenv = %s->mgrp->dbenv;\n", \ + args[txn_idx]) >> CFILE + printf("\tif (dbenv == NULL || dbenv->cl_handle == NULL) {\n") \ + >> CFILE + printf("\t\t__db_err(dbenv, \"No server environment.\");\n") \ + >> CFILE + } else { + printf("\tif (%s == NULL || %s->cl_handle == NULL) {\n", \ + args[env_idx], args[env_idx]) >> CFILE + printf("\t\t__db_err(%s, \"No server environment.\");\n", \ + args[env_idx]) >> CFILE + } + printf("\t\treturn (DB_NOSERVER);\n") >> CFILE + printf("\t}\n") >> CFILE + printf("\n") >> CFILE + + # + # Free old reply if there was one. + # + printf("\tif (replyp != NULL) {\n") >> CFILE + printf("\t\txdr_free((xdrproc_t)xdr___%s_reply, (void *)replyp);\n", \ + name) >> CFILE + printf("\t\treplyp = NULL;\n\t}\n") >> CFILE + if (!env_handle) + printf("\tcl = (CLIENT *)dbenv->cl_handle;\n") >> CFILE + else + printf("\tcl = (CLIENT *)%s->cl_handle;\n", \ + args[env_idx]) >> CFILE + + printf("\n") >> CFILE + + # + # If there is a function arg, check that it is NULL + # + for (i = 0; i < nvars; ++i) { + if (func_arg[i] != 1) + continue; + printf("\tif (%s != NULL) {\n", args[i]) >> CFILE + printf("\t\t__db_err(%s, ", args[env_idx]) >> CFILE + printf("\"User functions not supported in RPC.\");\n") >> CFILE + printf("\t\treturn (EINVAL);\n\t}\n") >> CFILE + } + + # + # Compose message components + # + for (i = 0; i < nvars; ++i) { + if (rpc_type[i] == "ID") { + printf("\tif (%s == NULL)\n", args[i]) >> CFILE + printf("\t\treq.%scl_id = 0;\n\telse\n", \ + args[i]) >> CFILE + if (c_type[i] == "DB_TXN *") { + printf("\t\treq.%scl_id = %s->txnid;\n", \ + args[i], args[i]) >> CFILE + } else { + printf("\t\treq.%scl_id = %s->cl_id;\n", \ + args[i], args[i]) >> CFILE + } + } + if (rpc_type[i] == "INT") { + printf("\treq.%s = %s;\n", args[i], args[i]) >> CFILE + } + if (rpc_type[i] == "STRING") { + printf("\tif (%s == NULL)\n", args[i]) >> CFILE + printf("\t\treq.%s = \"\";\n", args[i]) >> CFILE + printf("\telse\n") >> CFILE + printf("\t\treq.%s = (char *)%s;\n", \ + args[i], args[i]) >> CFILE + } + if (rpc_type[i] == "DBT") { + printf("\treq.%sdlen = %s->dlen;\n", \ + args[i], args[i]) >> CFILE + printf("\treq.%sdoff = %s->doff;\n", \ + args[i], args[i]) >> CFILE + printf("\treq.%sflags = %s->flags;\n", \ + args[i], args[i]) >> CFILE + printf("\treq.%sdata.%sdata_val = %s->data;\n", \ + args[i], args[i], args[i]) >> CFILE + printf("\treq.%sdata.%sdata_len = %s->size;\n", \ + args[i], args[i], args[i]) >> CFILE + } + if (rpc_type[i] == "LIST") { + printf("\tif ((ret = __dbcl_%s_%slist(", \ + name, args[i]) >> CFILE + printf("&req.%slist, %s)) != 0)\n", \ + args[i], args[i]) >> CFILE + printf("\t\tgoto out;\n") >> CFILE + } + } + + printf("\n") >> CFILE + printf("\treplyp = __db_%s_%d(&req, cl);\n", name, msgid) >> CFILE + printf("\tif (replyp == NULL) {\n") >> CFILE + if (!env_handle) { + printf("\t\t__db_err(dbenv, ") >> CFILE + printf("clnt_sperror(cl, \"Berkeley DB\"));\n") >> CFILE + } else { + printf("\t\t__db_err(%s, ", args[env_idx]) >> CFILE + printf("clnt_sperror(cl, \"Berkeley DB\"));\n") >> CFILE + } + printf("\t\tret = DB_NOSERVER;\n") >> CFILE + printf("\t\tgoto out;\n") >> CFILE + printf("\t}\n") >> CFILE + + if (ret_code == 0) { + printf("\tret = replyp->status;\n") >> CFILE + } else { + for (i = 0; i < nvars; ++i) { + if (rpc_type[i] == "LIST") { + printf("\t__dbcl_%s_%sfree(&req.%slist);\n", \ + name, args[i], args[i]) >> CFILE + } + } + printf("\treturn (__dbcl_%s_ret(", name) >> CFILE + sep = ""; + for (i = 0; i < nvars; ++i) { + printf("%s%s", sep, args[i]) >> CFILE + sep = ", "; + } + printf("%sreplyp));\n", sep) >> CFILE + } + printf("out:\n") >> CFILE + for (i = 0; i < nvars; ++i) { + if (rpc_type[i] == "LIST") { + printf("\t__dbcl_%s_%sfree(&req.%slist);\n", \ + name, args[i], args[i]) >> CFILE + } + } + printf("\treturn (ret);\n") >> CFILE + printf("}\n\n") >> CFILE + + # + # If we are doing a list, write list functions for op. + # + for (i = 0; i < nvars; i++) { + if (rpc_type[i] != "LIST") + continue; + printf("int\n__dbcl_%s_%slist(locp, pp)\n", \ + name, args[i]) >> CFILE + printf("\t__%s_%slist **locp;\n", name, args[i]) >> CFILE + if (list_type[i] == "STRING") + printf("\t%s pp;\n{\n\t%s p;\n", \ + c_type[i], c_type[i]) >> CFILE + if (list_type[i] == "INT") + printf("\tu_int32_t *pp;\n{\n\tu_int32_t *p, *q;\n") \ + >> CFILE + if (list_type[i] == "ID") + printf("\t%s pp;\n{\n\t%s p;\n\tu_int32_t *q;\n", \ + c_type[i], c_type[i]) >> CFILE + + printf("\tint ret;\n") >> CFILE + printf("\t__%s_%slist *nl, **nlp;\n\n", name, args[i]) >> CFILE + printf("\t*locp = NULL;\n") >> CFILE + printf("\tif (pp == NULL)\n\t\treturn (0);\n") >> CFILE + printf("\tnlp = locp;\n") >> CFILE + printf("\tfor (p = pp; *p != 0; p++) {\n") >> CFILE + printf("\t\tif ((ret = __os_malloc(NULL, ") >> CFILE + printf("sizeof(*nl), NULL, nlp)) != 0)\n") >> CFILE + printf("\t\t\tgoto out;\n") >> CFILE + printf("\t\tnl = *nlp;\n") >> CFILE + printf("\t\tnl->next = NULL;\n") >> CFILE + printf("\t\tnl->ent.ent_val = NULL;\n") >> CFILE + printf("\t\tnl->ent.ent_len = 0;\n") >> CFILE + if (list_type[i] == "STRING") { + printf("\t\tif ((ret = __os_strdup(NULL, ") >> CFILE + printf("*p, &nl->ent.ent_val)) != 0)\n") >> CFILE + printf("\t\t\tgoto out;\n") >> CFILE + printf("\t\tnl->ent.ent_len = strlen(*p)+1;\n") >> CFILE + } + if (list_type[i] == "INT") { + printf("\t\tif ((ret = __os_malloc(NULL, ") >> CFILE + printf("sizeof(%s), NULL, &nl->ent.ent_val)) != 0)\n", \ + c_type[i]) >> CFILE + printf("\t\t\tgoto out;\n") >> CFILE + printf("\t\tq = (u_int32_t *)nl->ent.ent_val;\n") \ + >> CFILE + printf("\t\t*q = *p;\n") >> CFILE + printf("\t\tnl->ent.ent_len = sizeof(%s);\n", \ + c_type[i]) >> CFILE + } + if (list_type[i] == "ID") { + printf("\t\tif ((ret = __os_malloc(NULL, ") >> CFILE + printf("sizeof(u_int32_t),") >> CFILE + printf(" NULL, &nl->ent.ent_val)) != 0)\n") >> CFILE + printf("\t\t\tgoto out;\n") >> CFILE + printf("\t\tq = (u_int32_t *)nl->ent.ent_val;\n") \ + >> CFILE + printf("\t\t*q = (*p)->cl_id;\n") >> CFILE + printf("\t\tnl->ent.ent_len = sizeof(u_int32_t);\n") \ + >> CFILE + } + printf("\t\tnlp = &nl->next;\n") >> CFILE + printf("\t}\n") >> CFILE + printf("\treturn (0);\n") >> CFILE + printf("out:\n") >> CFILE + printf("\t__dbcl_%s_%sfree(locp);\n", name, args[i]) >> CFILE + printf("\treturn (ret);\n") >> CFILE + + printf("}\n\n") >> CFILE + + printf("void\n__dbcl_%s_%sfree(locp)\n", name, args[i]) >> CFILE + printf("\t__%s_%slist **locp;\n", name, args[i]) >> CFILE + printf("{\n") >> CFILE + printf("\t__%s_%slist *nl, *nl1;\n\n", name, args[i]) >> CFILE + printf("\tif (locp == NULL)\n\t\treturn;\n") >> CFILE + printf("\tfor (nl = *locp; nl != NULL; nl = nl1) {\n") >> CFILE + printf("\t\tnl1 = nl->next;\n") >> CFILE + printf("\t\tif (nl->ent.ent_val)\n") >> CFILE + printf("\t\t\t__os_free(nl->ent.ent_val, nl->ent.ent_len);\n") \ + >> CFILE + printf("\t\t__os_free(nl, sizeof(*nl));\n") >> CFILE + printf("\t}\n}\n\n") >> CFILE + } + # + # Generate Client Template code + # + if (ret_code) { + # + # If we are doing a list, write prototypes + # + for (i = 0; i < rvars; ++i) { + if (ret_type[i] != "LIST") + continue; + if (retlist_type[i] != "STRING" && + retlist_type[i] != "INT" && list_type[i] != "ID") + continue; + printf("int __db_%s_%sreplist __P((", \ + name, retargs[i]) >> TFILE + printf("__%s_%sreplist, ", \ + name, retargs[i]) >> TFILE + if (retlist_type[i] == "STRING") { + printf("char ***));\n") >> TFILE + } + if (retlist_type[i] == "INT" || + retlist_type[i] == "ID") { + printf("u_int32_t **));\n") >> TFILE + } + printf("void __db_%s_%sfree __P((", \ + name, retargs[i]) >> TFILE + if (retlist_type[i] == "STRING") + printf("char **));\n") >> TFILE + if (retlist_type[i] == "INT" || retlist_type[i] == "ID") + printf("u_int32_t *));\n\n") >> TFILE + } + + printf("int __dbcl_%s_ret __P((", name) >> CHFILE + sep = ""; + for (i = 0; i < nvars; ++i) { + printf("%s%s", sep, pr_type[i]) >> CHFILE + sep = ", "; + } + printf("%s__%s_reply *));\n", sep, name) >> CHFILE + + printf("int\n") >> TFILE + printf("__dbcl_%s_ret(", name) >> TFILE + sep = ""; + for (i = 0; i < nvars; ++i) { + printf("%s%s", sep, args[i]) >> TFILE + sep = ", "; + } + printf("%sreplyp)\n",sep) >> TFILE + + for (i = 0; i < nvars; ++i) + if (func_arg[i] == 0) + printf("\t%s %s;\n", c_type[i], args[i]) \ + >> TFILE + else + printf("\t%s;\n", c_type[i]) >> TFILE + printf("\t__%s_reply *replyp;\n", name) >> TFILE; + printf("{\n") >> TFILE + printf("\tint ret;\n") >> TFILE + # + # Local vars in template + # + for (i = 0; i < rvars; ++i) { + if (ret_type[i] == "ID" || ret_type[i] == "STRING" || + ret_type[i] == "INT" || ret_type[i] == "DBL") { + printf("\t%s %s;\n", \ + retc_type[i], retargs[i]) >> TFILE + } else if (ret_type[i] == "LIST") { + if (retlist_type[i] == "STRING") + printf("\tchar **__db_%slist;\n", \ + retargs[i]) >> TFILE + if (retlist_type[i] == "ID" || + retlist_type[i] == "INT") + printf("\tu_int32_t *__db_%slist;\n", \ + retargs[i]) >> TFILE + } else { + printf("\t/* %s %s; */\n", \ + ret_type[i], retargs[i]) >> TFILE + } + } + # + # Client return code + # + printf("\n") >> TFILE + printf("\tif (replyp->status != 0)\n") >> TFILE + printf("\t\treturn (replyp->status);\n") >> TFILE + for (i = 0; i < rvars; ++i) { + varname = ""; + if (ret_type[i] == "ID") { + varname = sprintf("%scl_id", retargs[i]); + } + if (ret_type[i] == "STRING") { + varname = retargs[i]; + } + if (ret_type[i] == "INT" || ret_type[i] == "DBL") { + varname = retargs[i]; + } + if (ret_type[i] == "DBT") { + varname = sprintf("%sdata", retargs[i]); + } + if (ret_type[i] == "ID" || ret_type[i] == "STRING" || + ret_type[i] == "INT" || ret_type[i] == "DBL") { + printf("\t%s = replyp->%s;\n", \ + retargs[i], varname) >> TFILE + } else if (ret_type[i] == "LIST") { + printf("\n\tif ((ret = __db_%s_%slist(", \ + name, retargs[i]) >> TFILE + printf("replyp->%slist, &__db_%slist)) != 0)", \ + retargs[i], retargs[i]) >> TFILE + printf("\n\t\treturn (ret);\n") >> TFILE + printf("\n\t/*\n") >> TFILE + printf("\t * XXX Handle list\n") >> TFILE + printf("\t */\n\n") >> TFILE + printf("\t__db_%s_%sfree(__db_%slist);\n", \ + name, retargs[i], retargs[i]) >> TFILE + } else { + printf("\t/* Handle replyp->%s; */\n", \ + varname) >> TFILE + } + } + printf("\n\t/*\n\t * XXX Code goes here\n\t */\n\n") >> TFILE + printf("\treturn (replyp->status);\n") >> TFILE + printf("}\n\n") >> TFILE + # + # If we are doing a list, write list functions for this op. + # + for (i = 0; i < rvars; ++i) { + if (ret_type[i] != "LIST") + continue; + if (retlist_type[i] != "STRING" && + retlist_type[i] != "INT" && list_type[i] != "ID") + continue; + printf("int\n") >> TFILE + printf("__db_%s_%sreplist(locp, ppp)\n", \ + name, retargs[i]) >> TFILE + printf("\t__%s_%sreplist *locp;\n", \ + name, retargs[i]) >> TFILE + if (retlist_type[i] == "STRING") { + printf("\tchar ***ppp;\n{\n") >> TFILE + printf("\tchar **pp;\n") >> TFILE + } + if (retlist_type[i] == "INT" || + retlist_type[i] == "ID") { + printf("\tu_int32_t **ppp;\n{\n") >> TFILE + printf("\tu_int32_t *pp;\n") >> TFILE + } + + printf("\tint cnt, ret, size;\n") >> TFILE + printf("\t__%s_%sreplist *nl;\n\n", \ + name, retargs[i]) >> TFILE + printf("\tfor (cnt = 0, nl = locp; ") >> TFILE + printf("nl != NULL; cnt++, nl = nl->next)\n\t\t;\n\n") \ + >> TFILE + printf("\tif (cnt == 0) {\n") >> TFILE + printf("\t\t*ppp = NULL;\n") >> TFILE + printf("\t\treturn (0);\n\t}\n") >> TFILE + printf("\tsize = sizeof(*pp) * cnt;\n") >> TFILE + printf("\tif ((ret = __os_malloc(NULL, ") >> TFILE + printf("size, NULL, ppp)) != 0)\n") >> TFILE + printf("\t\treturn (ret);\n") >> TFILE + printf("\tmemset(*ppp, 0, size);\n") >> TFILE + printf("\tfor (pp = *ppp, nl = locp; ") >> TFILE + printf("nl != NULL; nl = nl->next, pp++) {\n") >> TFILE + if (retlist_type[i] == "STRING") { + printf("\t\tif ((ret = __os_malloc(NULL, ") \ + >> TFILE + printf("nl->ent.ent_len + 1, NULL,") >> TFILE + printf(" pp)) != 0)\n") >> TFILE + printf("\t\t\tgoto out;\n") >> TFILE + printf("\t\tif ((ret = __os_strdup(") >> TFILE + printf("NULL, (char *)nl->ent.ent_val,") \ + >> TFILE + printf(" pp)) != 0)\n") >> TFILE + printf("\t\t\tgoto out;\n") >> TFILE + } + if (retlist_type[i] == "INT" || + retlist_type[i] == "ID") { + printf("\t\t*pp = *(u_int32_t *)") >> TFILE + printf("nl->ent.ent_val;\n") >> TFILE + } + printf("\t}\n") >> TFILE + printf("\treturn (0);\n") >> TFILE + printf("out:\n") >> TFILE + printf("\t__db_%s_%sfree(*ppp);\n", \ + name, retargs[i]) >> TFILE + printf("\treturn (ret);\n") >> TFILE + printf("}\n\n") >> TFILE + + printf("void\n") >> TFILE + printf("__db_%s_%sfree(pp)\n", \ + name, retargs[i]) >> TFILE + + if (retlist_type[i] == "STRING") + printf("\tchar **pp;\n") >> TFILE + if (retlist_type[i] == "INT" || retlist_type[i] == "ID") + printf("\tu_int32_t *pp;\n") >> TFILE + + printf("{\n") >> TFILE + printf("\tsize_t size;\n") >> TFILE + + if (retlist_type[i] == "STRING") + printf("\tchar **p;\n\n") >> TFILE + if (retlist_type[i] == "INT" || retlist_type[i] == "ID") + printf("\tu_int32_t *p;\n\n") >> TFILE + + printf("\tif (pp == NULL)\n\t\treturn;\n") >> TFILE + printf("\tsize = sizeof(*p);\n") >> TFILE + printf("\tfor (p = pp; *p != 0; p++) {\n") >> TFILE + printf("\t\tsize += sizeof(*p);\n") >> TFILE + + if (retlist_type[i] == "STRING") + printf("\t\t__os_free(*p, strlen(*p)+1);\n") \ + >> TFILE + printf("\t}\n") >> TFILE + printf("\t__os_free(pp, size);\n") >> TFILE + printf("}\n\n") >> TFILE + } + } +} + +# +# split_lines -- +# Add line separators to pretty-print the output. +function split_lines(is_public) { + if (argcount > 3) { + # Reset the counter, remove any trailing whitespace from + # the separator. + argcount = 0; + sub("[ ]$", "", sep) + + if (is_public) { + printf("%s\n\t", sep) >> SHFILE + } else { + printf("%s\n\t\t", sep) >> PFILE + printf("%s\\\n\\\t\\\t", sep) >> SEDFILE + } + } +} diff --git a/bdb/dist/install-sh b/bdb/dist/install-sh new file mode 100755 index 00000000000..b41a2459161 --- /dev/null +++ b/bdb/dist/install-sh @@ -0,0 +1,251 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' + ' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/bdb/dist/ltconfig b/bdb/dist/ltconfig new file mode 100644 index 00000000000..f78afda0e1f --- /dev/null +++ b/bdb/dist/ltconfig @@ -0,0 +1,3136 @@ +#! /bin/sh + +# ltconfig - Create a system-specific libtool. +# Copyright (C) 1996-1999 Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A lot of this script is taken from autoconf-2.10. + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} +echo=echo +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec "$SHELL" "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<EOF +$* +EOF + exit 0 +fi + +# Find the correct PATH separator. Usually this is `:', but +# DJGPP uses `;' like DOS. +if test "X${PATH_SEPARATOR+set}" != Xset; then + UNAME=${UNAME-`uname 2>/dev/null`} + case X$UNAME in + *-DOS) PATH_SEPARATOR=';' ;; + *) PATH_SEPARATOR=':' ;; + esac +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string="`eval $cmd`") 2>/dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" != 'X\t' || + test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for dir in $PATH /usr/ucb; do + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running ltconfig again with it. + ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}" + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + echo='printf "%s\n"' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + # Cool, printf works + : + elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' && + test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL" + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL $0 --fallback-echo" + elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' && + test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + echo="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# The name of this program. +progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'` + +# Constants: +PROGRAM=ltconfig +PACKAGE=libtool +VERSION=1.3.5 +TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)" +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +rm="rm -f" + +help="Try \`$progname --help' for more information." + +# Global variables: +default_ofile=libtool +can_build_shared=yes +enable_shared=yes +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +enable_static=yes +enable_fast_install=yes +enable_dlopen=unknown +enable_win32_dll=no +ltmain= +silent= +srcdir= +ac_config_guess= +ac_config_sub= +host= +nonopt= +ofile="$default_ofile" +verify_host=yes +with_gcc=no +with_gnu_ld=no +need_locks=yes +ac_ext=c +objext=o +libext=a +exeext= +cache_file= + +old_AR="$AR" +old_CC="$CC" +old_CFLAGS="$CFLAGS" +old_CPPFLAGS="$CPPFLAGS" +old_LDFLAGS="$LDFLAGS" +old_LD="$LD" +old_LN_S="$LN_S" +old_LIBS="$LIBS" +old_NM="$NM" +old_RANLIB="$RANLIB" +old_DLLTOOL="$DLLTOOL" +old_OBJDUMP="$OBJDUMP" +old_AS="$AS" + +# Parse the command line options. +args= +prev= +for option +do + case "$option" in + -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + eval "$prev=\$option" + prev= + continue + fi + + case "$option" in + --help) cat <<EOM +Usage: $progname [OPTION]... [HOST [LTMAIN]] + +Generate a system-specific libtool script. + + --debug enable verbose shell tracing + --disable-shared do not build shared libraries + --disable-static do not build static libraries + --disable-fast-install do not optimize for fast installation + --enable-dlopen enable dlopen support + --enable-win32-dll enable building dlls on win32 hosts + --help display this help and exit + --no-verify do not verify that HOST is a valid host type +-o, --output=FILE specify the output file [default=$default_ofile] + --quiet same as \`--silent' + --silent do not print informational messages + --srcdir=DIR find \`config.guess' in DIR + --version output version information and exit + --with-gcc assume that the GNU C compiler will be used + --with-gnu-ld assume that the C compiler uses the GNU linker + --disable-lock disable file locking + --cache-file=FILE configure cache file + +LTMAIN is the \`ltmain.sh' shell script fragment or \`ltmain.c' program +that provides basic libtool functionality. + +HOST is the canonical host system name [default=guessed]. +EOM + exit 0 + ;; + + --debug) + echo "$progname: enabling shell trace mode" + set -x + ;; + + --disable-shared) enable_shared=no ;; + + --disable-static) enable_static=no ;; + + --disable-fast-install) enable_fast_install=no ;; + + --enable-dlopen) enable_dlopen=yes ;; + + --enable-win32-dll) enable_win32_dll=yes ;; + + --quiet | --silent) silent=yes ;; + + --srcdir) prev=srcdir ;; + --srcdir=*) srcdir="$optarg" ;; + + --no-verify) verify_host=no ;; + + --output | -o) prev=ofile ;; + --output=*) ofile="$optarg" ;; + + --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"; exit 0 ;; + + --with-gcc) with_gcc=yes ;; + --with-gnu-ld) with_gnu_ld=yes ;; + + --disable-lock) need_locks=no ;; + + --cache-file=*) cache_file="$optarg" ;; + + -*) + echo "$progname: unrecognized option \`$option'" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + + *) + if test -z "$ltmain"; then + ltmain="$option" + elif test -z "$host"; then +# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1 +# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then +# echo "$progname: warning \`$option' is not a valid host type" 1>&2 +# fi + host="$option" + else + echo "$progname: too many arguments" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac +done + +if test -z "$ltmain"; then + echo "$progname: you must specify a LTMAIN file" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + +if test ! -f "$ltmain"; then + echo "$progname: \`$ltmain' does not exist" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + +# Quote any args containing shell metacharacters. +ltconfig_args= +for arg +do + case "$arg" in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ltconfig_args="$ltconfig_args '$arg'" ;; + *) ltconfig_args="$ltconfig_args $arg" ;; + esac +done + +# A relevant subset of AC_INIT. + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 5 compiler messages saved in config.log +# 6 checking for... messages and results +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>>./config.log + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi +if test "X${LANG+set}" = Xset; then LANG=C; export LANG; fi + +if test -n "$cache_file" && test -r "$cache_file"; then + echo "loading cache $cache_file within ltconfig" + . $cache_file +fi + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + +if test -z "$srcdir"; then + # Assume the source directory is the same one as the path to LTMAIN. + srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'` + test "$srcdir" = "$ltmain" && srcdir=. +fi + +trap "$rm conftest*; exit 1" 1 2 15 +if test "$verify_host" = yes; then + # Check for config.guess and config.sub. + ac_aux_dir= + for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/config.guess; then + ac_aux_dir=$ac_dir + break + fi + done + if test -z "$ac_aux_dir"; then + echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2 + echo "$help" 1>&2 + exit 1 + fi + ac_config_guess=$ac_aux_dir/config.guess + ac_config_sub=$ac_aux_dir/config.sub + + # Make sure we can run config.sub. + if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then : + else + echo "$progname: cannot run $ac_config_sub" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + echo $ac_n "checking host system type""... $ac_c" 1>&6 + + host_alias=$host + case "$host_alias" in + "") + if host_alias=`$SHELL $ac_config_guess`; then : + else + echo "$progname: cannot guess host type; you must specify one" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac + host=`$SHELL $ac_config_sub $host_alias` + echo "$ac_t$host" 1>&6 + + # Make sure the host verified. + test -z "$host" && exit 1 + +elif test -z "$host"; then + echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2 + echo "$help" 1>&2 + exit 1 +else + host_alias=$host +fi + +# Transform linux* to *-*-linux-gnu*, to support old configure scripts. +case "$host_os" in +linux-gnu*) ;; +linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` +esac + +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +case "$host_os" in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR cru $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +# Set a sane default for `AR'. +test -z "$AR" && AR=ar + +# Set a sane default for `OBJDUMP'. +test -z "$OBJDUMP" && OBJDUMP=objdump + +# If RANLIB is not set, then run the test. +if test "${RANLIB+set}" != "set"; then + result=no + + echo $ac_n "checking for ranlib... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then + RANLIB="ranlib" + result="ranlib" + break + fi + done + IFS="$save_ifs" + + echo "$ac_t$result" 1>&6 +fi + +if test -n "$RANLIB"; then + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" +fi + +# Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin. +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$AS" && AS=as + +# Check to see if we are using GCC. +if test "$with_gcc" != yes || test -z "$CC"; then + # If CC is not set, then try to find GCC or a usable CC. + if test -z "$CC"; then + echo $ac_n "checking for gcc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then + CC="gcc" + break + fi + done + IFS="$save_ifs" + + if test -n "$CC"; then + echo "$ac_t$CC" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + fi + + # Not "gcc", so try "cc", rejecting "/usr/ucb/cc". + if test -z "$CC"; then + echo $ac_n "checking for cc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + cc_rejected=no + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/cc || test -f $dir/cc$ac_exeext; then + if test "$dir/cc" = "/usr/ucb/cc"; then + cc_rejected=yes + continue + fi + CC="cc" + break + fi + done + IFS="$save_ifs" + if test $cc_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same name, so the bogon will be chosen + # first if we set CC to just the name; use the full file name. + shift + set dummy "$dir/cc" "$@" + shift + CC="$@" + fi + fi + + if test -n "$CC"; then + echo "$ac_t$CC" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + + if test -z "$CC"; then + echo "$progname: error: no acceptable cc found in \$PATH" 1>&2 + exit 1 + fi + fi + + # Now see if the compiler is really GCC. + with_gcc=no + echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6 + echo "$progname:581: checking whether we are using GNU C" >&5 + + $rm conftest.c + cat > conftest.c <<EOF +#ifdef __GNUC__ + yes; +#endif +EOF + if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + with_gcc=yes + fi + $rm conftest.c + echo "$ac_t$with_gcc" 1>&6 +fi + +# Allow CC to be a program name with arguments. +set dummy $CC +compiler="$2" + +echo $ac_n "checking for object suffix... $ac_c" 1>&6 +$rm conftest* +echo 'int i = 1;' > conftest.c +echo "$progname:603: checking for object suffix" >& 5 +if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then + # Append any warnings to the config.log. + cat conftest.err 1>&5 + + for ac_file in conftest.*; do + case $ac_file in + *.c) ;; + *) objext=`echo $ac_file | sed -e s/conftest.//` ;; + esac + done +else + cat conftest.err 1>&5 + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 +fi +$rm conftest* +echo "$ac_t$objext" 1>&6 + +echo $ac_n "checking for executable suffix... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_cv_exeext="no" + $rm conftest* + echo 'main () { return 0; }' > conftest.c + echo "$progname:629: checking for executable suffix" >& 5 + if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then + # Append any warnings to the config.log. + cat conftest.err 1>&5 + + for ac_file in conftest.*; do + case $ac_file in + *.c | *.err | *.$objext ) ;; + *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;; + esac + done + else + cat conftest.err 1>&5 + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 + fi + $rm conftest* +fi +if test "X$ac_cv_exeext" = Xno; then + exeext="" +else + exeext="$ac_cv_exeext" +fi +echo "$ac_t$ac_cv_exeext" 1>&6 + +echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6 +pic_flag= +special_shlib_compile_flags= +wl= +link_static_flag= +no_builtin_flag= + +if test "$with_gcc" = yes; then + wl='-Wl,' + link_static_flag='-static' + + case "$host_os" in + beos* | irix5* | irix6* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + aix*) + # Below there is a dirty hack to force normal static linking with -ldl + # The problem is because libdl dynamically linked with both libc and + # libC (AIX C++ library), which obviously doesn't included in libraries + # list by gcc. This cause undefined symbols with -static flags. + # This hack allows C programs to be linked with "-static -ldl", but + # we not sure about C++ programs. + link_static_flag="$link_static_flag ${wl}-lC" + ;; + cygwin* | mingw* | os2*) + # We can build DLLs from non-PIC. + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + pic_flag='-m68020 -resident32 -malways-restore-a4' + ;; + sysv4*MP*) + if test -d /usr/nec; then + pic_flag=-Kconform_pic + fi + ;; + *) + pic_flag='-fPIC' + ;; + esac +else + # PORTME Check for PIC flags for the system compiler. + case "$host_os" in + aix3* | aix4*) + # All AIX code is PIC. + link_static_flag='-bnso -bI:/lib/syscalls.exp' + ;; + + hpux9* | hpux10* | hpux11*) + # Is there a better link_static_flag that works with the bundled CC? + wl='-Wl,' + link_static_flag="${wl}-a ${wl}archive" + pic_flag='+Z' + ;; + + irix5* | irix6*) + wl='-Wl,' + link_static_flag='-non_shared' + # PIC (with -KPIC) is the default. + ;; + + cygwin* | mingw* | os2*) + # We can build DLLs from non-PIC. + ;; + + osf3* | osf4* | osf5*) + # All OSF/1 code is PIC. + wl='-Wl,' + link_static_flag='-non_shared' + ;; + + sco3.2v5*) + pic_flag='-Kpic' + link_static_flag='-dn' + special_shlib_compile_flags='-belf' + ;; + + solaris*) + pic_flag='-KPIC' + link_static_flag='-Bstatic' + wl='-Wl,' + ;; + + sunos4*) + pic_flag='-PIC' + link_static_flag='-Bstatic' + wl='-Qoption ld ' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + pic_flag='-KPIC' + link_static_flag='-Bstatic' + wl='-Wl,' + ;; + + uts4*) + pic_flag='-pic' + link_static_flag='-Bstatic' + ;; + sysv4*MP*) + if test -d /usr/nec ;then + pic_flag='-Kconform_pic' + link_static_flag='-Bstatic' + fi + ;; + *) + can_build_shared=no + ;; + esac +fi + +if test -n "$pic_flag"; then + echo "$ac_t$pic_flag" 1>&6 + + # Check to make sure the pic_flag actually works. + echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6 + $rm conftest* + echo "int some_variable = 0;" > conftest.c + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $pic_flag -DPIC" + echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5 + if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then + # Append any warnings to the config.log. + cat conftest.err 1>&5 + + case "$host_os" in + hpux9* | hpux10* | hpux11*) + # On HP-UX, both CC and GCC only warn that PIC is supported... then they + # create non-PIC objects. So, if there were any warnings, we assume that + # PIC is not supported. + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + can_build_shared=no + pic_flag= + else + echo "$ac_t"yes 1>&6 + pic_flag=" $pic_flag" + fi + ;; + *) + echo "$ac_t"yes 1>&6 + pic_flag=" $pic_flag" + ;; + esac + else + # Append any errors to the config.log. + cat conftest.err 1>&5 + can_build_shared=no + pic_flag= + echo "$ac_t"no 1>&6 + fi + CFLAGS="$save_CFLAGS" + $rm conftest* +else + echo "$ac_t"none 1>&6 +fi + +# Check to see if options -o and -c are simultaneously supported by compiler +echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6 +$rm -r conftest 2>/dev/null +mkdir conftest +cd conftest +$rm conftest* +echo "int some_variable = 0;" > conftest.c +mkdir out +# According to Tom Tromey, Ian Lance Taylor reported there are C compilers +# that will create temporary files in the current directory regardless of +# the output directory. Thus, making CWD read-only will cause this test +# to fail, enabling locking or at least warning the user not to do parallel +# builds. +chmod -w . +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -o out/conftest2.o" +echo "$progname:829: checking if $compiler supports -c -o file.o" >&5 +if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then + + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s out/conftest.err; then + echo "$ac_t"no 1>&6 + compiler_c_o=no + else + echo "$ac_t"yes 1>&6 + compiler_c_o=yes + fi +else + # Append any errors to the config.log. + cat out/conftest.err 1>&5 + compiler_c_o=no + echo "$ac_t"no 1>&6 +fi +CFLAGS="$save_CFLAGS" +chmod u+w . +$rm conftest* out/* +rmdir out +cd .. +rmdir conftest +$rm -r conftest 2>/dev/null + +if test x"$compiler_c_o" = x"yes"; then + # Check to see if we can write to a .lo + echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6 + $rm conftest* + echo "int some_variable = 0;" > conftest.c + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -c -o conftest.lo" + echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5 +if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then + + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + compiler_o_lo=no + else + echo "$ac_t"yes 1>&6 + compiler_o_lo=yes + fi + else + # Append any errors to the config.log. + cat conftest.err 1>&5 + compiler_o_lo=no + echo "$ac_t"no 1>&6 + fi + CFLAGS="$save_CFLAGS" + $rm conftest* +else + compiler_o_lo=no +fi + +# Check to see if we can do hard links to lock some files if needed +hard_links="nottested" +if test "$compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$ac_t$hard_links" 1>&6 + $rm conftest* + if test "$hard_links" = no; then + echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2 + need_locks=warn + fi +else + need_locks=no +fi + +if test "$with_gcc" = yes; then + # Check to see if options -fno-rtti -fno-exceptions are supported by compiler + echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6 + $rm conftest* + echo "int some_variable = 0;" > conftest.c + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c" + echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 + if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then + + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + compiler_rtti_exceptions=no + else + echo "$ac_t"yes 1>&6 + compiler_rtti_exceptions=yes + fi + else + # Append any errors to the config.log. + cat conftest.err 1>&5 + compiler_rtti_exceptions=no + echo "$ac_t"no 1>&6 + fi + CFLAGS="$save_CFLAGS" + $rm conftest* + + if test "$compiler_rtti_exceptions" = "yes"; then + no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' + else + no_builtin_flag=' -fno-builtin' + fi + +fi + +# Check for any special shared library compilation flags. +if test -n "$special_shlib_compile_flags"; then + echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2 + if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then : + else + echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2 + can_build_shared=no + fi +fi + +echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6 +$rm conftest* +echo 'main(){return(0);}' > conftest.c +save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS $link_static_flag" +echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5 +if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + echo "$ac_t$link_static_flag" 1>&6 +else + echo "$ac_t"none 1>&6 + link_static_flag= +fi +LDFLAGS="$save_LDFLAGS" +$rm conftest* + +if test -z "$LN_S"; then + # Check to see if we can use ln -s, or we need hard links. + echo $ac_n "checking whether ln -s works... $ac_c" 1>&6 + $rm conftest.dat + if ln -s X conftest.dat 2>/dev/null; then + $rm conftest.dat + LN_S="ln -s" + else + LN_S=ln + fi + if test "$LN_S" = "ln -s"; then + echo "$ac_t"yes 1>&6 + else + echo "$ac_t"no 1>&6 + fi +fi + +# Make sure LD is an absolute path. +if test -z "$LD"; then + ac_prog=ld + if test "$with_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6 + echo "$progname:991: checking for ld used by GCC" >&5 + ac_prog=`($CC -print-prog-name=ld) 2>&5` + case "$ac_prog" in + # Accept absolute paths. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we are not using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac + elif test "$with_gnu_ld" = yes; then + echo $ac_n "checking for GNU ld... $ac_c" 1>&6 + echo "$progname:1015: checking for GNU ld" >&5 + else + echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 + echo "$progname:1018: checking for non-GNU ld" >&5 + fi + + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" + fi + + if test -n "$LD"; then + echo "$ac_t$LD" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + + if test -z "$LD"; then + echo "$progname: error: no acceptable ld found in \$PATH" 1>&2 + exit 1 + fi +fi + +# Check to see if it really is or is not GNU ld. +echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6 +# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then + with_gnu_ld=yes +else + with_gnu_ld=no +fi +echo "$ac_t$with_gnu_ld" 1>&6 + +# See if the linker supports building shared libraries. +echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6 + +allow_undefined_flag= +no_undefined_flag= +need_lib_prefix=unknown +need_version=unknown +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +archive_cmds= +archive_expsym_cmds= +old_archive_from_new_cmds= +export_dynamic_flag_spec= +whole_archive_flag_spec= +thread_safe_flag_spec= +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no +hardcode_shlibpath_var=unsupported +runpath_var= +always_export_symbols=no +export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' +# include_expsyms should be a list of space-separated symbols to be *always* +# included in the symbol list +include_expsyms= +# exclude_expsyms can be an egrep regular expression of symbols to exclude +# it will be wrapped by ` (' and `)$', so one must not match beginning or +# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', +# as well as any symbol that contains `d'. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_" +# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out +# platforms (ab)use it in PIC code, but their linkers get confused if +# the symbol is explicitly referenced. Since portable code cannot +# rely on this symbol name, it's probably fine to never include it in +# preloaded symbol tables. + +case "$host_os" in +cygwin* | mingw*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$with_gcc" != yes; then + with_gnu_ld=no + fi + ;; + +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case "$host_os" in + aix3* | aix4*) + # On AIX, the GNU linker is very broken + ld_shlibs=no + cat <<EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + ;; + + amigaos*) + archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + + # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can use + # them. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach <jrb3@best.com> says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=yes + + # Extract the symbol export list from an `--export-all' def file, + # then regenerate the def file from the symbol export list, so that + # the compiled dll only exports the symbol export list. + # Be careful not to strip the DATA tag left by newer dlltools. + export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~ + test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~ + $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def $objdir/$soname-ltdll.$objext $libobjs $convenience~ + sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $objdir/$soname-def > $export_symbols' + + # If DATA tags from a recent dlltool are present, honour them! + archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~ + _lt_hint=1; + cat $export_symbols | while read symbol; do + set dummy \$symbol; + case \$# in + 2) echo " \$2 @ \$_lt_hint ; " >> $objdir/$soname-def;; + *) echo " \$2 @ \$_lt_hint \$3 ; " >> $objdir/$soname-def;; + esac; + _lt_hint=`expr 1 + \$_lt_hint`; + done~ + test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~ + test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~ + $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~ + $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~ + $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts' + + old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a' + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib' + # can we support soname and/or expsyms with a.out? -oliva + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linkopts' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + case $host_os in + cygwin* | mingw*) + # dlltool doesn't understand --whole-archive et. al. + whole_archive_flag_spec= + ;; + *) + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + ;; + esac + fi +else + # PORTME fill in a description of your system's linker (not GNU ld) + case "$host_os" in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$with_gcc" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4*) + hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib' + hardcode_libdir_separator=':' + if test "$with_gcc" = yes; then + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + shared_flag='-shared' + else + shared_flag='${wl}-bM:SRE' + hardcode_direct=yes + fi + allow_undefined_flag=' ${wl}-berok' + archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}' + archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}' + #### local change for Sleepycat DB: + # On AIX 4.3.2 (at least), -bexpall exports too much, + # causing symbol conflicts. This was: + # case "$host_os" in aix4.[01]|aix4.[01].*) + case "$host_os" in aix4.*) + # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on + always_export_symbols=yes ;; + esac + ;; + + amigaos*) + archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + + cygwin* | mingw*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib /OUT:$oldlib$oldobjs' + fix_srcfile_path='`cygpath -w $srcfile`' + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9* | hpux10* | hpux11*) + case "$host_os" in + hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;; + *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;; + esac + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_minus_L=yes # Not in the search PATH, but as the default + # location of the library. + export_dynamic_flag_spec='${wl}-E' + ;; + + irix5* | irix6*) + if test "$with_gcc" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts' # ELF + fi + hardcode_libdir_flag_spec='${wl}-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + openbsd*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def' + ;; + + osf3*) + if test "$with_gcc" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # As osf3* with the addition of the -msym flag + if test "$with_gcc" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + rhapsody*) + archive_cmds='$CC -bundle -undefined suppress -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flags_spec='-L$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + sco3.2v5*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case "$host_os" in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $linkopts' + else + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv5*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp' + hardcode_libdir_flag_spec= + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linkopts' + hardcode_direct=yes + hardcode_minus_L=no + hardcode_shlibpath_var=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + unixware7*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac +fi +echo "$ac_t$ld_shlibs" 1>&6 +test "$ld_shlibs" = no && can_build_shared=no + +if test -z "$NM"; then + echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6 + case "$NM" in + [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path. + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + NM="$ac_dir/nm -B" + break + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + NM="$ac_dir/nm -p" + break + else + NM=${NM="$ac_dir/nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + fi + fi + done + IFS="$ac_save_ifs" + test -z "$NM" && NM=nm + ;; + esac + echo "$ac_t$NM" 1>&6 +fi + +# Check for command to grab the raw symbol name followed by C symbol from nm. +echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6 + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" + +# Define system-specific variables. +case "$host_os" in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw*) + symcode='[ABCDGISTW]' + ;; +hpux*) # Its linker distinguishes data from code symbols + global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'" + ;; +irix*) + symcode='[BCDEGRST]' + ;; +solaris*) + symcode='[BDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then + symcode='[ABCDGISTW]' +fi + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode\)[ ][ ]*\($ac_symprfx\)$sympat$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + $rm conftest* + cat > conftest.c <<EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(){} +#ifdef __cplusplus +} +#endif +main(){nm_test_var='a';nm_test_func();return(0);} +EOF + + echo "$progname:1653: checking if global_symbol_pipe works" >&5 + if { (eval echo $progname:1654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then + # Now try to grab the symbols. + nlist=conftest.nm + if { echo "$progname:1657: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then + + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if egrep ' nm_test_var$' "$nlist" >/dev/null; then + if egrep ' nm_test_func$' "$nlist" >/dev/null; then + cat <<EOF > conftest.c +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c' + + cat <<EOF >> conftest.c +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{ +EOF + sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c + cat <<\EOF >> conftest.c + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$objext conftstm.$objext + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="conftstm.$objext" + CFLAGS="$CFLAGS$no_builtin_flag" + if { (eval echo $progname:1709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + pipe_works=yes + else + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 + fi + LIBS="$save_LIBS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 + fi + $rm conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + global_symbol_pipe= + fi +done +if test "$pipe_works" = yes; then + echo "${ac_t}ok" 1>&6 +else + echo "${ac_t}failed" 1>&6 +fi + +if test -z "$global_symbol_pipe"; then + global_symbol_to_cdecl= +fi + +# Check hardcoding attributes. +echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var"; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$hardcode_shlibpath_var" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +echo "$ac_t$hardcode_action" 1>&6 + + +reload_flag= +reload_cmds='$LD$reload_flag -o $output$reload_objs' +echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6 +# PORTME Some linkers may need a different reload flag. +reload_flag='-r' +echo "$ac_t$reload_flag" 1>&6 +test -n "$reload_flag" && reload_flag=" $reload_flag" + +# PORTME Fill in your ld.so characteristics +library_names_spec= +libname_spec='lib$name' +soname_spec= +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +file_magic_cmd= +file_magic_test_file= +deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [regex]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given egrep regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. +echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6 +case "$host_os" in +aix3*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}.so$major' + ;; + +aix4*) + version_type=linux + # AIX has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + # We preserve .a as extension for shared libraries though AIX4.2 + # and later linker supports .so + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a' + shlibpath_var=LIBPATH + deplibs_check_method=pass_all + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}.so' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + deplibs_check_method=pass_all + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + file_magic_cmd=/usr/bin/file + file_magic_test_file=/shlib/libc.so + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + export_dynamic_flag_spec=-rdynamic + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw*) + version_type=windows + need_version=no + need_lib_prefix=no + if test "$with_gcc" = yes; then + library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a' + else + library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib' + fi + dynamic_linker='Win32 ld.exe' + deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + file_magic_cmd='${OBJDUMP} -f' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case "$version_type" in + freebsd-elf*) + deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' + file_magic_cmd=/usr/bin/file + file_magic_test_file=`echo /usr/lib/libc.so*` + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + deplibs_check_method=unknown + library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case "$host_os" in + freebsd2* | freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + dynamic_linker="$host_os dld.sl" + version_type=sunos + need_lib_prefix=no + need_version=no + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' + soname_spec='${libname}${release}.sl$major' + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + + #### local change for Sleepycat DB: [#1990] + # The following 3 lines added, otherwise dependent libraries are not allowed + # on HP. We use dependent libraries in a very straightforward way, to + # incorporate -lnsl into libtcl.sl, and for testing only. + deplibs_check_method='file_magic PA-RISC[1-9][0-9.]* shared library' + file_magic_cmd=/usr/bin/file + file_magic_test_file=`echo /lib/libc.sl*` + ;; + +irix5* | irix6*) + version_type=irix + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}.so.$major' + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so' + case "$host_os" in + irix5*) + libsuff= shlibsuff= + # this will be overridden with pass_all, but let us keep it just in case + deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" + ;; + *) + case "$LD" in # libtool.m4 will add one of these switches to LD + *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + file_magic_cmd=/usr/bin/file + file_magic_test_file=`echo /lib${libsuff}/libc.so*` + deplibs_check_method='pass_all' + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux-gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + deplibs_check_method=pass_all + + if test -f /lib/ld.so.1; then + dynamic_linker='GNU ld.so' + else + # Only the GNU ld.so supports shared libraries on MkLinux. + case "$host_cpu" in + powerpc*) dynamic_linker=no ;; + *) dynamic_linker='Linux ld.so' ;; + esac + fi + ;; + +netbsd*) + version_type=sunos + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' + soname_spec='${libname}${release}.so$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + ;; + +openbsd*) + version_type=sunos + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + need_version=no + fi + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +os2*) + libname_spec='$name' + need_lib_prefix=no + library_names_spec='$libname.dll $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_version=no + soname_spec='${libname}${release}.so' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + shlibpath_var=LD_LIBRARY_PATH + # this will be overridden with pass_all, but let us keep it just in case + deplibs_check_method='file_magic COFF format alpha shared library' + file_magic_cmd=/usr/bin/file + file_magic_test_file=/shlib/libc.so + deplibs_check_method='pass_all' + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rhapsody*) + version_type=sunos + library_names_spec='${libname}.so' + soname_spec='${libname}.so' + shlibpath_var=DYLD_LIBRARY_PATH + deplibs_check_method=pass_all + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + #### local change for Sleepycat DB: + # The following line added, otherwise dependent libraries are not allowed + # on SCO. We use dependent libraries in a very straightforward way. + deplibs_check_method='pass_all' + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib" + file_magic_cmd=/usr/bin/file + file_magic_test_file=/lib/libc.so + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + case "$host_vendor" in + sequent) + file_magic_cmd='/bin/file' + deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + ncr) + deplibs_check_method='pass_all' + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + file_magic_cmd=/usr/bin/file + file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + esac + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' + soname_spec='$libname.so.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +#### local change for Sleepycat DB: +# Add in the QNX support from QNX. +nto-qnx) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + deplibs_check_method='pass_all' + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$ac_t$dynamic_linker" 1>&6 +test "$dynamic_linker" = no && can_build_shared=no + +# Report the final consequences. +echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6 + +# Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in +# configure.in, otherwise build static only libraries. +case "$host_os" in +cygwin* | mingw* | os2*) + if test x$can_build_shared = xyes; then + test x$enable_win32_dll = xno && can_build_shared=no + echo "checking if package supports dlls... $can_build_shared" 1>&6 + fi +;; +esac + +if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then + case "$deplibs_check_method" in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + egrep "$file_magic_regex" > /dev/null; then + : + else + cat <<EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac +fi + +echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4*) + test "$enable_shared" = yes && enable_static=no + ;; +esac + +echo "$ac_t$enable_shared" 1>&6 + +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes + +echo "checking whether to build static libraries... $enable_static" 1>&6 + +if test "$hardcode_action" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +echo $ac_n "checking for objdir... $ac_c" 1>&6 +rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + objdir=_libs +fi +rmdir .libs 2>/dev/null +echo "$ac_t$objdir" 1>&6 + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else +if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then + lt_cv_dlopen=no lt_cv_dlopen_libs= +echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 +echo "$progname:2248: checking for dlopen in -ldl" >&5 +ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldl $LIBS" +cat > conftest.$ac_ext <<EOF +#line 2256 "ltconfig" +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen(); + +int main() { +dlopen() +; return 0; } +EOF +if { (eval echo $progname:2269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dlopen""... $ac_c" 1>&6 +echo "$progname:2288: checking for dlopen" >&5 +if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2293 "ltconfig" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +dlopen(); +#endif + +; return 0; } +EOF +if { (eval echo $progname:2318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_dlopen=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_dlopen=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dlopen" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6 +echo "$progname:2335: checking for dld_link in -ldld" >&5 +ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldld $LIBS" +cat > conftest.$ac_ext <<EOF +#line 2343 "ltconfig" +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link(); + +int main() { +dld_link() +; return 0; } +EOF +if { (eval echo $progname:2356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for shl_load""... $ac_c" 1>&6 +echo "$progname:2375: checking for shl_load" >&5 +if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2380 "ltconfig" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +shl_load(); +#endif + +; return 0; } +EOF +if { (eval echo $progname:2405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_shl_load=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_shl_load=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="shl_load" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 +echo "$progname:2423: checking for shl_load in -ldld" >&5 +ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldld $LIBS" +cat > conftest.$ac_ext <<EOF +#line 2431 "ltconfig" +#include "confdefs.h" +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load(); + +int main() { +shl_load() +; return 0; } +EOF +if { (eval echo $progname:2445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + echo "$ac_t""no" 1>&6 +fi + + +fi + + +fi + + +fi + + +fi + +fi + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + fi + + case "$lt_cv_dlopen" in + dlopen) +for ac_hdr in dlfcn.h; do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "$progname:2488: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2493 "ltconfig" +#include <$ac_hdr> +int fnord = 0; +EOF +ac_try="$ac_compile >/dev/null 2>conftest.out" +{ (eval echo $progname:2498: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi +done + + if test "x$ac_cv_header_dlfcn_h" = xyes; then + CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + fi + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6 +echo "$progname:2526: checking whether a program can dlopen itself" >&5 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + lt_cv_dlopen_self=cross + else + cat > conftest.c <<EOF +#line 2534 "ltconfig" + +#if HAVE_DLFCN_H +#include <dlfcn.h> +#endif + +#include <stdio.h> + +#ifdef RTLD_GLOBAL +# define LTDL_GLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LTDL_GLOBAL DL_GLOBAL +# else +# define LTDL_GLOBAL 0 +# endif +#endif + +/* We may have to define LTDL_LAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LTDL_LAZY_OR_NOW +# ifdef RTLD_LAZY +# define LTDL_LAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LTDL_LAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LTDL_LAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LTDL_LAZY_OR_NOW DL_NOW +# else +# define LTDL_LAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +fnord() { int i=42;} +main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); + if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); + if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } + +EOF +if { (eval echo $progname:2580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + lt_cv_dlopen_self=yes +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + lt_cv_dlopen_self=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$lt_cv_dlopen_self" 1>&6 + + if test "$lt_cv_dlopen_self" = yes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6 +echo "$progname:2599: checking whether a statically linked program can dlopen itself" >&5 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + lt_cv_dlopen_self_static=cross + else + cat > conftest.c <<EOF +#line 2607 "ltconfig" + +#if HAVE_DLFCN_H +#include <dlfcn.h> +#endif + +#include <stdio.h> + +#ifdef RTLD_GLOBAL +# define LTDL_GLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LTDL_GLOBAL DL_GLOBAL +# else +# define LTDL_GLOBAL 0 +# endif +#endif + +/* We may have to define LTDL_LAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LTDL_LAZY_OR_NOW +# ifdef RTLD_LAZY +# define LTDL_LAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LTDL_LAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LTDL_LAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LTDL_LAZY_OR_NOW DL_NOW +# else +# define LTDL_LAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +fnord() { int i=42;} +main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); + if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); + if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } + +EOF +if { (eval echo $progname:2653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + lt_cv_dlopen_self_static=yes +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + lt_cv_dlopen_self_static=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6 +fi + ;; + esac + + case "$lt_cv_dlopen_self" in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case "$lt_cv_dlopen_self_static" in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + +# Copy echo and quote the copy, instead of the original, because it is +# used later. +ltecho="$echo" +if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then + ltecho="$CONFIG_SHELL \$0 --fallback-echo" +fi +LTSHELL="$SHELL" + +LTCONFIG_VERSION="$VERSION" + +# Only quote variables if we're using ltmain.sh. +case "$ltmain" in +*.sh) + # Now quote all the things that may contain metacharacters. + for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \ + old_LD old_LDFLAGS old_LIBS \ + old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \ + AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \ + reload_flag reload_cmds wl \ + pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ + thread_safe_flag_spec whole_archive_flag_spec libname_spec \ + library_names_spec soname_spec \ + RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ + old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \ + file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \ + finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ + hardcode_libdir_flag_spec hardcode_libdir_separator \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do + + case "$var" in + reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case "$ltecho" in + *'\$0 --fallback-echo"') + ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + + trap "$rm \"$ofile\"; exit 1" 1 2 15 + echo "creating $ofile" + $rm "$ofile" + cat <<EOF > "$ofile" +#! $SHELL + +# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh. +# +# Copyright (C) 1996-1999 Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="sed -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +### BEGIN LIBTOOL CONFIG +EOF + cfgfile="$ofile" + ;; + +*) + # Double-quote the variables that need it (for aesthetics). + for var in old_CC old_CFLAGS old_CPPFLAGS \ + old_LD old_LDFLAGS old_LIBS \ + old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do + eval "$var=\\\"\$var\\\"" + done + + # Just create a config file. + cfgfile="$ofile.cfg" + trap "$rm \"$cfgfile\"; exit 1" 1 2 15 + echo "creating $cfgfile" + $rm "$cfgfile" + cat <<EOF > "$cfgfile" +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +EOF + ;; +esac + +cat <<EOF >> "$cfgfile" +# Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# +# CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\ +# LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\ +# NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\ +# DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\ +# $0$ltconfig_args +# +# Compiler and other test output produced by $progname, useful for +# debugging $progname, is in ./config.log if it exists. + +# The version of $progname that generated this script. +LTCONFIG_VERSION=$LTCONFIG_VERSION + +# Shell to use when invoking shell scripts. +SHELL=$LTSHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$ltecho + +# The archiver. +AR=$AR + +# The default C compiler. +CC=$CC + +# The linker used to build libraries. +LD=$LD + +# Whether we need hard or soft links. +LN_S=$LN_S + +# A BSD-compatible nm program. +NM=$NM + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$reload_flag +reload_cmds=$reload_cmds + +# How to pass a linker flag through the compiler. +wl=$wl + +# Object file suffix (normally "o"). +objext="$objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$pic_flag + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$compiler_c_o + +# Can we write directly to a .lo ? +compiler_o_lo=$compiler_o_lo + +# Must we lock files when doing compilation ? +need_locks=$need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$link_static_flag + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$no_builtin_flag + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$whole_archive_flag_spec + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$thread_safe_flag_spec + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$RANLIB +old_archive_cmds=$old_archive_cmds +old_postinstall_cmds=$old_postinstall_cmds +old_postuninstall_cmds=$old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$old_archive_from_new_cmds + +# Commands used to build and install a shared archive. +archive_cmds=$archive_cmds +archive_expsym_cmds=$archive_expsym_cmds +postinstall_cmds=$postinstall_cmds +postuninstall_cmds=$postuninstall_cmds + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$no_undefined_flag + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$global_symbol_to_cdecl + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$hardcode_libdir_separator + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$include_expsyms + +EOF + +case "$ltmain" in +*.sh) + echo '### END LIBTOOL CONFIG' >> "$ofile" + echo >> "$ofile" + case "$host_os" in + aix3*) + cat <<\EOF >> "$ofile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # Append the ltmain.sh script. + sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1) + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + + chmod +x "$ofile" + ;; + +*) + # Compile the libtool program. + echo "FIXME: would compile $ltmain" + ;; +esac + +test -n "$cache_file" || exit 0 + +# AC_CACHE_SAVE +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +#! /bin/bash diff --git a/bdb/dist/ltmain.sh b/bdb/dist/ltmain.sh new file mode 100644 index 00000000000..4feadbfb759 --- /dev/null +++ b/bdb/dist/ltmain.sh @@ -0,0 +1,4029 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun ltconfig. +# +# Copyright (C) 1996-1999 Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<EOF +$* +EOF + exit 0 +fi + +# The name of this program. +progname=`$echo "$0" | sed 's%^.*/%%'` +modename="$progname" + +# Constants. +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=1.3.5 +TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)" + +default_mode= +help="Try \`$progname --help' for more information." +magic="%%%MAGIC variable%%%" +mkdir="mkdir" +mv="mv -f" +rm="rm -f" + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e 1s/^X//' +sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' +SP2NL='tr \040 \012' +NL2SP='tr \015\012 \040\040' + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +# We save the old values to restore during execute mode. +if test "${LC_ALL+set}" = set; then + save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL +fi +if test "${LANG+set}" = set; then + save_LANG="$LANG"; LANG=C; export LANG +fi + +if test "$LTCONFIG_VERSION" != "$VERSION"; then + echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + echo "$modename: not configured to build any kind of library" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" + +# Parse our command line options once, thoroughly. +while test $# -gt 0 +do + arg="$1" + shift + + case "$arg" in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case "$prev" in + execute_dlfiles) + eval "$prev=\"\$$prev \$arg\"" + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case "$arg" in + --help) + show_help=yes + ;; + + --version) + echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" + exit 0 + ;; + + --config) + sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0 + exit 0 + ;; + + --debug) + echo "$progname: enabling shell trace mode" + set -x + ;; + + --dry-run | -n) + run=: + ;; + + --features) + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + exit 0 + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --quiet | --silent) + show=: + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 +fi + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + case "$nonopt" in + *cc | *++ | gcc* | *-gcc*) + mode=link + for arg + do + case "$arg" in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case "$mode" in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + lastarg= + srcfile="$nonopt" + suppress_output= + + user_target=no + for arg + do + # Accept any command-line options. + case "$arg" in + -o) + if test "$user_target" != "no"; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit 1 + fi + user_target=next + ;; + + -static) + build_old_libs=yes + continue + ;; + esac + + case "$user_target" in + next) + # The next one is the -o target name + user_target=yes + continue + ;; + yes) + # We got the output file + user_target=set + libobj="$arg" + continue + ;; + esac + + # Accept the current argument as the source file. + lastarg="$srcfile" + srcfile="$arg" + + # Aesthetically quote the previous argument. + + # Backslashify any backslashes, double quotes, and dollar signs. + # These are the only characters that are still specially + # interpreted inside of double-quoted scrings. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly in scan + # sets, so we specify it separately. + case "$lastarg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + lastarg="\"$lastarg\"" + ;; + esac + + # Add the previous argument to base_compile. + if test -z "$base_compile"; then + base_compile="$lastarg" + else + base_compile="$base_compile $lastarg" + fi + done + + case "$user_target" in + set) + ;; + no) + # Get the name of the library object. + libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + *) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit 1 + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSfmso]' + case "$libobj" in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case "$libobj" in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit 1 + ;; + esac + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $libobj" + else + removelist="$libobj" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit 1" 1 2 15 + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit 1" 1 2 15 + else + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until ln "$0" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + echo "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + echo $srcfile > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + # All platforms use -DPIC, to notify preprocessed assembler code. + command="$base_compile $srcfile $pic_flag -DPIC" + if test "$build_old_libs" = yes; then + lo_libobj="$libobj" + dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$libobj"; then + dir="$objdir" + else + dir="$dir/$objdir" + fi + libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` + + if test -d "$dir"; then + $show "$rm $libobj" + $run $rm $libobj + else + $show "$mkdir $dir" + $run $mkdir $dir + status=$? + if test $status -ne 0 && test ! -d $dir; then + exit $status + fi + fi + fi + if test "$compiler_o_lo" = yes; then + output_obj="$libobj" + command="$command -o $output_obj" + elif test "$compiler_c_o" = yes; then + output_obj="$obj" + command="$command -o $output_obj" + fi + + $run $rm "$output_obj" + $show "$command" + if $run eval "$command"; then : + else + test -n "$output_obj" && $run $rm $removelist + exit 1 + fi + + if test "$need_locks" = warn && + test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then + echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed, then go on to compile the next one + if test x"$output_obj" != x"$libobj"; then + $show "$mv $output_obj $libobj" + if $run $mv $output_obj $libobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # If we have no pic_flag, then copy the object into place and finish. + if test -z "$pic_flag" && test "$build_old_libs" = yes; then + # Rename the .lo from within objdir to obj + if test -f $obj; then + $show $rm $obj + $run $rm $obj + fi + + $show "$mv $libobj $obj" + if $run $mv $libobj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` + libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` + # Now arrange that obj and lo_libobj become the same file + $show "(cd $xdir && $LN_S $baseobj $libobj)" + if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then + exit 0 + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Allow error messages only from the first compilation. + suppress_output=' >/dev/null 2>&1' + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + command="$base_compile $srcfile" + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + output_obj="$obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + $run $rm "$output_obj" + $show "$command" + if $run eval "$command"; then : + else + $run $rm $removelist + exit 1 + fi + + if test "$need_locks" = warn && + test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then + echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed + if test x"$output_obj" != x"$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Create an invalid libtool object if no PIC, so that we do not + # accidentally link it into a program. + if test "$build_libtool_libs" != yes; then + $show "echo timestamp > $libobj" + $run eval "echo timestamp > \$libobj" || exit $? + else + # Move the .lo from within objdir + $show "$mv $libobj $lo_libobj" + if $run $mv $libobj $lo_libobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + fi + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + $rm "$lockfile" + fi + + exit 0 + ;; + + # libtool link mode + link) + modename="$modename: link" + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invokation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + + # This is a source program that is used to create dlls on Windows + # Don't remove nor modify the starting and closing comments +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include <windows.h> +# #undef WIN32_LEAN_AND_MEAN +# #include <stdio.h> +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __cplusplus +# extern "C" { +# #endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# #ifdef __cplusplus +# } +# #endif +# +# #ifdef __CYGWIN__ +# #include <cygwin/cygwin_dll.h> +# DECLARE_CYGWIN_DLL( DllMain ); +# #endif +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ + # This is a source program that is used to create import libraries + # on Windows for dlls which lack them. Don't remove nor modify the + # starting and closing comments +# /* impgen.c starts here */ +# /* Copyright (C) 1999 Free Software Foundation, Inc. +# +# This file is part of GNU libtool. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# */ +# +# #include <stdio.h> /* for printf() */ +# #include <unistd.h> /* for open(), lseek(), read() */ +# #include <fcntl.h> /* for O_RDONLY, O_BINARY */ +# #include <string.h> /* for strdup() */ +# +# static unsigned int +# pe_get16 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[2]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 2); +# return b[0] + (b[1]<<8); +# } +# +# static unsigned int +# pe_get32 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[4]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 4); +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# static unsigned int +# pe_as32 (ptr) +# void *ptr; +# { +# unsigned char *b = ptr; +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# int +# main (argc, argv) +# int argc; +# char *argv[]; +# { +# int dll; +# unsigned long pe_header_offset, opthdr_ofs, num_entries, i; +# unsigned long export_rva, export_size, nsections, secptr, expptr; +# unsigned long name_rvas, nexp; +# unsigned char *expdata, *erva; +# char *filename, *dll_name; +# +# filename = argv[1]; +# +# dll = open(filename, O_RDONLY|O_BINARY); +# if (!dll) +# return 1; +# +# dll_name = filename; +# +# for (i=0; filename[i]; i++) +# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') +# dll_name = filename + i +1; +# +# pe_header_offset = pe_get32 (dll, 0x3c); +# opthdr_ofs = pe_header_offset + 4 + 20; +# num_entries = pe_get32 (dll, opthdr_ofs + 92); +# +# if (num_entries < 1) /* no exports */ +# return 1; +# +# export_rva = pe_get32 (dll, opthdr_ofs + 96); +# export_size = pe_get32 (dll, opthdr_ofs + 100); +# nsections = pe_get16 (dll, pe_header_offset + 4 +2); +# secptr = (pe_header_offset + 4 + 20 + +# pe_get16 (dll, pe_header_offset + 4 + 16)); +# +# expptr = 0; +# for (i = 0; i < nsections; i++) +# { +# char sname[8]; +# unsigned long secptr1 = secptr + 40 * i; +# unsigned long vaddr = pe_get32 (dll, secptr1 + 12); +# unsigned long vsize = pe_get32 (dll, secptr1 + 16); +# unsigned long fptr = pe_get32 (dll, secptr1 + 20); +# lseek(dll, secptr1, SEEK_SET); +# read(dll, sname, 8); +# if (vaddr <= export_rva && vaddr+vsize > export_rva) +# { +# expptr = fptr + (export_rva - vaddr); +# if (export_rva + export_size > vaddr + vsize) +# export_size = vsize - (export_rva - vaddr); +# break; +# } +# } +# +# expdata = (unsigned char*)malloc(export_size); +# lseek (dll, expptr, SEEK_SET); +# read (dll, expdata, export_size); +# erva = expdata - export_rva; +# +# nexp = pe_as32 (expdata+24); +# name_rvas = pe_as32 (expdata+32); +# +# printf ("EXPORTS\n"); +# for (i = 0; i<nexp; i++) +# { +# unsigned long name_rva = pe_as32 (erva+name_rvas+i*4); +# printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i); +# } +# +# return 0; +# } +# /* impgen.c ends here */ + ;; + *) + allow_undefined=yes + ;; + esac + compile_command="$nonopt" + finalize_command="$nonopt" + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + linkopts= + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + lib_search_path= + fi + # now prepend the system-specific ones + eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + avoid_version=no + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + link_against_libtool_libs= + ltlibs= + module=no + objs= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + + # We need to know -static, to get the right output filenames. + for arg + do + case "$arg" in + -all-static | -static) + if test "X$arg" = "X-all-static"; then + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + fi + build_libtool_libs=no + build_old_libs=yes + prefer_static_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test $# -gt 0; do + arg="$1" + shift + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case "$prev" in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case "$prev" in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case "$arg" in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit 1 + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case "$arg" in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi + + prevarg="$arg" + + case "$arg" in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: not more than one -exported-symbols argument allowed" + exit 1 + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case "$dir" in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + absdir="$dir" + fi + dir="$absdir" + ;; + esac + case " $deplibs " in + *" $arg "*) ;; + *) deplibs="$deplibs $arg";; + esac + case " $lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir";; + esac + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2*) + dllsearchdir=`cd "$dir" && pwd || echo "$dir"` + case ":$dllsearchpath:" in + ::) dllsearchpath="$dllsearchdir";; + *":$dllsearchdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dllsearchdir";; + esac + ;; + esac + ;; + + -l*) + if test "$arg" = "-lc"; then + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) + # These systems don't actually have c library (as such) + continue + ;; + esac + elif test "$arg" = "-lm"; then + case "$host" in + *-*-cygwin* | *-*-beos*) + # These systems don't actually have math library (as such) + continue + ;; + esac + fi + deplibs="$deplibs $arg" + ;; + + -module) + module=yes + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -o) prev=output ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case "$dir" in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static) + # If we have no pic_flag, then this is the same as -all-static. + if test -z "$pic_flag" && test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + ;; + + *.o | *.obj | *.a | *.lib) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A library object. + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` + prev= + fi + libobjs="$libobjs $arg" + ;; + + *.la) + # A libtool-controlled library. + + dlname= + libdir= + library_names= + old_library= + + # Check to see that this really is a libtool archive. + if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2 + exit 1 + fi + + # If the library was installed with an old release of libtool, + # it will not redefine variable installed. + installed=yes + + # Read the .la file + # If there is no directory component, then add one. + case "$arg" in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$arg'" 1>&2 + exit 1 + fi + + # Find the relevant object directory and library name. + name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'` + + if test "X$installed" = Xyes; then + dir="$libdir" + else + dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$arg"; then + dir="$objdir" + else + dir="$dir/$objdir" + fi + fi + + if test -n "$dependency_libs"; then + # Extract -R and -L from dependency_libs + temp_deplibs= + for deplib in $dependency_libs; do + case "$deplib" in + -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + case " $rpath $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + -L*) case "$compile_command $temp_deplibs " in + *" $deplib "*) ;; + *) temp_deplibs="$temp_deplibs $deplib";; + esac + temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'` + case " $lib_search_path " in + *" $temp_dir "*) ;; + *) lib_search_path="$lib_search_path $temp_dir";; + esac + ;; + *) temp_deplibs="$temp_deplibs $deplib";; + esac + done + dependency_libs="$temp_deplibs" + fi + + if test -z "$libdir"; then + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $dir/$old_library" + old_convenience="$old_convenience $dir/$old_library" + deplibs="$deplibs$dependency_libs" + compile_command="$compile_command $dir/$old_library$dependency_libs" + finalize_command="$finalize_command $dir/$old_library$dependency_libs" + continue + fi + + # This library was specified with -dlopen. + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking statically, + # we need to preload. + prev=dlprefiles + else + # We should not create a dependency on this library, but we + # may need any libraries it requires. + compile_command="$compile_command$dependency_libs" + finalize_command="$finalize_command$dependency_libs" + prev= + continue + fi + fi + + # The library was specified with -dlpreopen. + if test "$prev" = dlprefiles; then + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + dlprefiles="$dlprefiles $dir/$old_library" + else + dlprefiles="$dlprefiles $dir/$linklib" + fi + prev= + fi + + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + link_against_libtool_libs="$link_against_libtool_libs $arg" + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + + # We need an absolute path. + case "$dir" in + [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + absdir="$dir" + fi + ;; + esac + + # This is the magic to use -rpath. + # Skip directories that are in the system default run-time + # search path, unless they have been requested with -R. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + + lib_linked=yes + case "$hardcode_action" in + immediate | unsupported) + if test "$hardcode_direct" = no; then + compile_command="$compile_command $dir/$linklib" + deplibs="$deplibs $dir/$linklib" + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2*) + dllsearchdir=`cd "$dir" && pwd || echo "$dir"` + if test -n "$dllsearchpath"; then + dllsearchpath="$dllsearchpath:$dllsearchdir" + else + dllsearchpath="$dllsearchdir" + fi + ;; + esac + elif test "$hardcode_minus_L" = no; then + case "$host" in + *-*-sunos*) + compile_shlibpath="$compile_shlibpath$dir:" + ;; + esac + case "$compile_command " in + *" -L$dir "*) ;; + *) compile_command="$compile_command -L$dir";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -L$dir -l$name" + elif test "$hardcode_shlibpath_var" = no; then + case ":$compile_shlibpath:" in + *":$dir:"*) ;; + *) compile_shlibpath="$compile_shlibpath$dir:";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -l$name" + else + lib_linked=no + fi + ;; + + relink) + if test "$hardcode_direct" = yes; then + compile_command="$compile_command $absdir/$linklib" + deplibs="$deplibs $absdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + case "$compile_command " in + *" -L$absdir "*) ;; + *) compile_command="$compile_command -L$absdir";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -L$absdir -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case ":$compile_shlibpath:" in + *":$absdir:"*) ;; + *) compile_shlibpath="$compile_shlibpath$absdir:";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -l$name" + else + lib_linked=no + fi + ;; + + *) + lib_linked=no + ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit 1 + fi + + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + finalize_command="$finalize_command $libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + case "$finalize_command " in + *" -L$libdir "*) ;; + *) finalize_command="$finalize_command -L$libdir";; + esac + finalize_command="$finalize_command -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case ":$finalize_shlibpath:" in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:";; + esac + finalize_command="$finalize_command -l$name" + else + # We cannot seem to hardcode it, guess we'll fake it. + case "$finalize_command " in + *" -L$dir "*) ;; + *) finalize_command="$finalize_command -L$libdir";; + esac + finalize_command="$finalize_command -l$name" + fi + else + # Transform directly to old archives if we don't build new libraries. + if test -n "$pic_flag" && test -z "$old_library"; then + $echo "$modename: cannot find static library for \`$arg'" 1>&2 + exit 1 + fi + + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_command="$compile_command $dir/$linklib" + finalize_command="$finalize_command $dir/$linklib" + else + case "$compile_command " in + *" -L$dir "*) ;; + *) compile_command="$compile_command -L$dir";; + esac + compile_command="$compile_command -l$name" + case "$finalize_command " in + *" -L$dir "*) ;; + *) finalize_command="$finalize_command -L$dir";; + esac + finalize_command="$finalize_command -l$name" + fi + fi + + # Add in any libraries that this one depends upon. + compile_command="$compile_command$dependency_libs" + finalize_command="$finalize_command$dependency_libs" + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + ;; + esac + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + case "$output" in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *.a | *.lib) + if test -n "$link_against_libtool_libs"; then + $echo "$modename: error: cannot link libtool libraries into archives" 1>&2 + exit 1 + fi + + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + ;; + + *.la) + # Make sure we only generate libraries of the form `libNAME.la'. + case "$outputname" in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + + if test -n "$objs"; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 + exit 1 + fi + + # How the heck are we supposed to write a wrapper for a shared library? + if test -n "$link_against_libtool_libs"; then + $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2 + exit 1 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test $# -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + libext=al + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + dependency_libs="$deplibs" + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + current="$2" + revision="$3" + age="$4" + + # Check that each of the things are valid numbers. + case "$current" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$revision" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$age" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + if test $age -gt $current; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case "$version_type" in + none) ;; + + irix) + major=`expr $current - $age + 1` + versuffix="$major.$revision" + verstring="sgi$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test $loop != 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="sgi$major.$iface:$verstring" + done + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test $loop != 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + windows) + # Like Linux, but with '-' rather than '.', since we only + # want one extension on Windows 95. + major=`expr $current - $age` + versuffix="-$major-$age-$revision" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + verstring="0.0" + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + dependency_libs="$deplibs" + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + + #### local change for Sleepycat DB: [#2380] + # The following case is added, since the linker's -pthread + # option implicitly controls use of -lc or -lc_r. + *freebsd*) + # defer to whether the user wants -lc, or -lc_r + ;; + + *) + # Add libc to deplibs on all other systems. + deplibs="$deplibs -lc" + ;; + esac + fi + + # Create the output directory, or remove our outputs if we need to. + if test -d $output_objdir; then + $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" + $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* + else + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test $status -ne 0 && test ! -d $output_objdir; then + exit $status + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + if test "$build_libtool_libs" = yes; then + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case "$deplibs_check_method" in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behaviour. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $rm conftest.c + cat > conftest.c <<EOF + int main() { return 0; } +EOF + $rm conftest + $CC -o conftest conftest.c $deplibs + if test $? -eq 0 ; then + ldd_output=`ldd conftest` + for i in $deplibs; do + name="`expr $i : '-l\(.*\)'`" + # If $name is empty we are operating on a -L argument. + if test "$name" != "" ; then + libname=`eval \\$echo \"$libname_spec\"` + deplib_matches=`eval \\$echo \"$library_names_spec\"` + set dummy $deplib_matches + deplib_match=$2 + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then + newdeplibs="$newdeplibs $i" + else + droppeddeps=yes + echo + echo "*** Warning: This library needs some functionality provided by $i." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + fi + else + newdeplibs="$newdeplibs $i" + fi + done + else + # Error occured in the first compile. Let's try to salvage the situation: + # Compile a seperate program for each library. + for i in $deplibs; do + name="`expr $i : '-l\(.*\)'`" + # If $name is empty we are operating on a -L argument. + if test "$name" != "" ; then + $rm conftest + $CC -o conftest conftest.c $i + # Did it work? + if test $? -eq 0 ; then + ldd_output=`ldd conftest` + libname=`eval \\$echo \"$libname_spec\"` + deplib_matches=`eval \\$echo \"$library_names_spec\"` + set dummy $deplib_matches + deplib_match=$2 + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then + newdeplibs="$newdeplibs $i" + else + droppeddeps=yes + echo + echo "*** Warning: This library needs some functionality provided by $i." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + fi + else + droppeddeps=yes + echo + echo "*** Warning! Library $i is needed by this library but I was not able to" + echo "*** make it link in! You will probably need to install it or some" + echo "*** library that it depends on before this library will be fully" + echo "*** functional. Installing it before continuing would be even better." + fi + else + newdeplibs="$newdeplibs $i" + fi + done + fi + ;; + file_magic*) + set dummy $deplibs_check_method + file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`" + for a_deplib in $deplibs; do + name="`expr $a_deplib : '-l\(.*\)'`" + # If $name is empty we are operating on a -L argument. + if test "$name" != "" ; then + libname=`eval \\$echo \"$libname_spec\"` + for i in $lib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null \ + | grep " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | sed 's/.* -> //'` + case "$potliblink" in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | sed 10q \ + | egrep "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + echo "*** Warning: This library needs some functionality provided by $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' | + grep . >/dev/null; then + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + echo "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + # Get the real and link names of the library. + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + lib="$output_objdir/$realname" + for link + do + linknames="$linknames $link" + done + + # Ensure that we have .o objects for linkers which dislike .lo + # (e.g. aix) in case we are running --disable-static + for obj in $libobjs; do + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` + if test ! -f $xdir/$oldobj; then + $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" + $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $? + fi + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + eval cmds=\"$export_symbols_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "mkdir $gentop" + $run mkdir "$gentop" + status=$? + if test $status -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case "$xlib" in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linkopts="$linkopts $flag" + fi + + # Do each of the archive commands. + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval cmds=\"$archive_expsym_cmds\" + else + eval cmds=\"$archive_cmds\" + fi + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + *.lo | *.o | *.obj) + if test -n "$link_against_libtool_libs"; then + $echo "$modename: error: cannot link libtool libraries into objects" 1>&2 + exit 1 + fi + + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case "$output" in + *.lo) + if test -n "$objs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit 1 + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${obj}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "mkdir $gentop" + $run mkdir "$gentop" + status=$? + if test $status -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case "$xlib" in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + # Create the old-style object. + reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" + + output="$obj" + eval cmds=\"$reload_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + $show "echo timestamp > $libobj" + $run eval "echo timestamp > $libobj" || exit $? + exit 0 + fi + + if test -n "$pic_flag"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + eval cmds=\"$reload_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + else + # Just create a symlink. + $show $rm $libobj + $run $rm $libobj + xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$libobj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` + oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` + $show "(cd $xdir && $LN_S $oldobj $baseobj)" + $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + ;; + + # Anything else should be a program. + *) + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$compile_rpath " in + *" $libdir "*) ;; + *) compile_rpath="$compile_rpath $libdir" ;; + esac + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + + # Create the binary in the object directory, then wrap it. + if test ! -d $output_objdir; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test $status -ne 0 && test ! -d $output_objdir; then + exit $status + fi + fi + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case "$dlsyms" in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$output.exp" + $run $rm $export_symbols + $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + else + $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' + $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`echo "$arg" | sed -e 's%^.*/%%'` + $run eval 'echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $mv "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then + : + else + grep -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{\ +" + + sed -n -e 's/^: \([^ ]*\) $/ {\"\1\", (lt_ptr_t) 0},/p' \ + -e 's/^. \([^ ]*\) \([^ ]*\)$/ {"\2", (lt_ptr_t) \&\2},/p' \ + < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr_t) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + case "$host" in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DPIC";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit 1 + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case "$dir" in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $0 --fallback-echo"; then + case "$0" in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; + *) qecho="$SHELL `pwd`/$0 --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`echo $output|sed 's,.exe$,,'` ;; + esac + $rm $output + trap "$rm $output; exit 1" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + link_against_libtool_libs='$link_against_libtool_libs' +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + echo >> $output "\ + program=lt-'$outputname' + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $mkdir \"\$progdir\" + else + $rm \"\$progdir/\$file\" + fi" + + echo >> $output "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if (cd \"\$thisdir\" && eval \$relink_command); then : + else + $rm \"\$progdir/\$file\" + exit 1 + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # win32 systems need to use the prog path for dll + # lookup to work + *-*-cygwin*) + $echo >> $output "\ + exec \$progdir/\$program \${1+\"\$@\"} +" + ;; + + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \$progdir\\\\\$program \${1+\"\$@\"} +" + ;; + + *) + $echo >> $output "\ + # Export the path to the program. + PATH=\"\$progdir:\$PATH\" + export PATH + + exec \$program \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit 1 + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" + chmod +x $output + fi + exit 0 + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "mkdir $gentop" + $run mkdir "$gentop" + status=$? + if test $status -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + # Add in members from convenience archives. + for xlib in $addlibs; do + # Extract the objects. + case "$xlib" in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` + done + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + eval cmds=\"$old_archive_from_new_cmds\" + else + # Ensure that we have .o objects in place in case we decided + # not to build a shared library, and have fallen back to building + # static libs even though --disable-static was passed! + for oldobj in $oldobjs; do + if test ! -f $oldobj; then + xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$oldobj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` + obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` + $show "(cd $xdir && ${LN_S} $obj $baseobj)" + $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $? + fi + done + + eval cmds=\"$old_archive_cmds\" + fi + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case "$output" in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "creating $output" + + if test -n "$xrpath"; then + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + done + dependency_libs="$temp_xrpath $dependency_libs" + fi + + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + fi + $rm $output + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$dlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Directory that this library needs to be installed in: +libdir='$install_libdir'\ +" + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $? + ;; + esac + exit 0 + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case "$arg" in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit 1 + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test $# -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + fi + case "$destdir" in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case "$file" in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case "$file" in + *.a | *.lib) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + library_names= + old_library= + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/" + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$realname $destdir/$realname" + $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? + + if test $# -gt 0; then + # Delete the old symlinks, and create new ones. + for linkname + do + if test "$linkname" != "$realname"; then + $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + eval cmds=\"$postinstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case "$destfile" in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.o | *.obj) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit 0 + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Do a test to see if this is really a libtool program. + if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + link_against_libtool_libs= + relink_command= + + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Check the variables that should have been set. + if test -z "$link_against_libtool_libs"; then + $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 + exit 1 + fi + + finalize=yes + for lib in $link_against_libtool_libs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case "$lib" in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`" + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir="/tmp" + test -n "$TMPDIR" && tmpdir="$TMPDIR" + tmpdir="$tmpdir/libtool-$$" + if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : + else + $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 + continue + fi + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + # Do each command in the postinstall commands. + eval cmds=\"$old_postinstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec $SHELL $0 --finish$current_libdirs + exit 1 + fi + + exit 0 + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + eval cmds=\"$finish_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit 0 + + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + echo " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + echo " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + echo " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + echo "See any operating system documentation about shared libraries for" + echo "more information, such as the ld(1) and ld.so(8) manual pages." + echo "----------------------------------------------------------------------" + exit 0 + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit 1 + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + dir= + case "$file" in + *.la) + # Check to see that this really is a libtool archive. + if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit 1 + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case "$file" in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved enviroment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # Now actually exec the command. + eval "exec \$cmd$args" + + $echo "$modename: cannot exec \$cmd$args" + exit 1 + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + fi + $echo "$cmd$args" + exit 0 + fi + ;; + + # libtool uninstall mode + uninstall) + modename="$modename: uninstall" + rm="$nonopt" + files= + + for arg + do + case "$arg" in + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + rmfiles="$file" + + case "$name" in + *.la) + # Possibly a libtool archive, so verify it. + if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $dir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" + + $show "$rm $rmfiles" + $run $rm $rmfiles + + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + eval cmds=\"$postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + eval cmds=\"$old_postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + + # FIXME: should reinstall the best remaining shared library. + fi + ;; + + *.lo) + if test "$build_old_libs" = yes; then + oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` + rmfiles="$rmfiles $dir/$oldobj" + fi + $show "$rm $rmfiles" + $run $rm $rmfiles + ;; + + *) + $show "$rm $rmfiles" + $run $rm $rmfiles + ;; + esac + done + exit 0 + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + ;; + esac + + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 +fi # test -z "$show_help" + +# We need to display help for each of the modes. +case "$mode" in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --config show all configuration variables + --debug enable verbose shell tracing +-n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --version print version information + +MODE must be one of the following: + + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE." + exit 0 + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -static always build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + +uninstall) + $echo \ +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; +esac + +echo +$echo "Try \`$modename --help' for more information about other modes." + +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +#! /bin/bash diff --git a/bdb/dist/rec_ctemp b/bdb/dist/rec_ctemp new file mode 100644 index 00000000000..6be6d3166b8 --- /dev/null +++ b/bdb/dist/rec_ctemp @@ -0,0 +1,62 @@ +/* + * __PREF_FUNC_recover -- + * Recovery function for FUNC. + * + * PUBLIC: int __PREF_FUNC_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__PREF_FUNC_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __PREF_FUNC_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__PREF_FUNC_print); + REC_INTRO(__PREF_FUNC_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + diff --git a/bdb/dist/s_all b/bdb/dist/s_all new file mode 100644 index 00000000000..dab6c75913b --- /dev/null +++ b/bdb/dist/s_all @@ -0,0 +1,16 @@ +#!/bin/sh - +# $Id: s_all,v 1.7 2000/12/22 15:35:32 bostic Exp $ + +sh s_perm # permissions. +sh s_symlink # symbolic links. +sh s_config # autoconf. +sh s_readme # db/README file. +sh s_recover # logging/recovery files. +sh s_rpc # RPC files. +sh s_include # standard include files. +sh s_win32 # Win32 include files. +sh s_win32_dsp # Win32 build environment. +sh s_vxworks # VxWorks include files. +sh s_java # Java support. +sh s_tcl # Tcl support. +sh s_tags # Tags files. diff --git a/bdb/dist/s_config b/bdb/dist/s_config new file mode 100755 index 00000000000..870109c38f9 --- /dev/null +++ b/bdb/dist/s_config @@ -0,0 +1,37 @@ +#!/bin/sh - +# $Id: s_config,v 1.3 2000/07/13 18:38:46 bostic Exp $ +# +# Build the autoconfiguration files. + +msgm4="dnl DO NOT EDIT: automatically built by dist/s_config." + +. ./RELEASE + +echo "Building aclocal.m4" +rm -f aclocal.m4 +(echo "$msgm4" && + echo "AC_DEFUN(AM_VERSION_SET, [" && + echo "AC_SUBST(DB_VERSION_MAJOR)" && + echo "DB_VERSION_MAJOR=$DB_VERSION_MAJOR" && + echo "AC_SUBST(DB_VERSION_MINOR)" && + echo "DB_VERSION_MINOR=$DB_VERSION_MINOR" && + echo "AC_SUBST(DB_VERSION_PATCH)" && + echo "DB_VERSION_PATCH=$DB_VERSION_PATCH" && + echo "AC_SUBST(DB_VERSION_STRING)" && + echo "DB_VERSION_STRING=\"\\\"$DB_VERSION_STRING\\\"\"" && + echo "])dnl" && + cat aclocal/*.m4) > aclocal.m4 +chmod 444 aclocal.m4 + +rm -f config.hin +echo "Building config.hin (autoheader)" +(autoheader configure.in > config.hin) 2>&1 | \ + sed '/warning: AC_TRY_RUN called without default/d' +chmod 444 config.hin + +rm -f configure +echo "Building configure (autoconf)" +autoconf 2>&1 | sed '/warning: AC_TRY_RUN called without default/d' + +chmod 555 configure config.guess config.sub install-sh +rm -f aclocal.m4 diff --git a/bdb/dist/s_include b/bdb/dist/s_include new file mode 100755 index 00000000000..fee6e50330f --- /dev/null +++ b/bdb/dist/s_include @@ -0,0 +1,33 @@ +#!/bin/sh - +# $Id: s_include,v 1.7 2000/07/13 18:38:46 bostic Exp $ +# +# Build the automatically generated function prototype files. + +msgc="/* DO NOT EDIT: automatically built by dist/s_include. */" +cxx_if="#if defined(__cplusplus)" +cxx_head="extern \"C\" {" +cxx_foot="}" +cxx_endif="#endif" + +tmp=/tmp/__db_inc.$$ +trap 'rm -f $tmp ; exit 0' 0 1 2 3 13 15 + +for i in db btree clib common env hash \ + lock log mp mutex os qam rpc_client rpc_server tcl txn xa; do + f=../include/${i}_ext.h + (echo "$msgc" && + echo "#ifndef _${i}_ext_h_" && + echo "#define _${i}_ext_h_" && + echo "$cxx_if" && + echo "$cxx_head" && + echo "$cxx_endif" && + sed -n "s/^ \* PUBLIC:[ ]\(.*\)/\1/p" ../$i/*.c; + [ $i = os ] && + sed -n "s/^ \* PUBLIC:[ ]\(.*\)/\1/p" ../os_win32/*.c; + echo "$cxx_if" && + echo "$cxx_foot" && + echo "$cxx_endif" && + echo "#endif /* _${i}_ext_h_ */") > $tmp + cmp $tmp $f > /dev/null 2>&1 || + (echo "Building $f" && rm -f $f && cp $tmp $f && chmod 444 $f) +done diff --git a/bdb/dist/s_java b/bdb/dist/s_java new file mode 100755 index 00000000000..f324678abaa --- /dev/null +++ b/bdb/dist/s_java @@ -0,0 +1,31 @@ +#!/bin/sh - +# $Id: s_java,v 1.3 2000/07/13 18:38:46 bostic Exp $ +# +# Build the Java files. + +msgcxx="// DO NOT EDIT: automatically built by dist/s_java." + +. RELEASE + +f=../java/src/com/sleepycat/db/DbConstants.java +echo "Building $f" +rm -f $f +(echo "$msgcxx" && \ + echo && + echo 'package com.sleepycat.db;' && + echo && + echo 'public class DbConstants' && + echo '{' && + egrep '^#define.DB_' ../include/db.src | \ + sed -e '/"/d' \ + -e '/@DB_VERSION_/d' \ + -e '/DB_REDO/d' \ + -e '/DB_UNDO/d' \ + -e 's/[()]/ /g' \ + -e 's/\/\*/ /' | \ + awk '{ print "\tpublic static final int " $2 " = " $3 ";" }' && + echo " public static final int DB_VERSION_MAJOR = $DB_VERSION_MAJOR;" && + echo " public static final int DB_VERSION_MINOR = $DB_VERSION_MINOR;" && + echo " public static final int DB_VERSION_PATCH = $DB_VERSION_PATCH;" && + echo '}') > $f +chmod 444 $f diff --git a/bdb/dist/s_perm b/bdb/dist/s_perm new file mode 100755 index 00000000000..4b0997f2f55 --- /dev/null +++ b/bdb/dist/s_perm @@ -0,0 +1,37 @@ +#!/bin/sh - +# $Id: s_perm,v 1.9 2001/01/24 15:55:38 bostic Exp $ + +echo 'Updating Berkeley DB source tree permissions...' + +run() +{ + echo " $1 ($2)" + if [ -f "../$1" ]; then + chmod "$2" "../$1" + else + echo "$1: no such file or directory" + exit 1 + fi +} + +run dist/build/chk.def 0555 +run dist/build/chk.define 0555 +run dist/build/chk.offt 0555 +run dist/build/chk.srcfiles 0555 +run dist/build/chk.tags 0555 +run dist/config.guess 0555 +run dist/config.sub 0555 +run dist/configure 0555 +run dist/install-sh 0555 +run dist/s_config 0555 +run dist/s_include 0555 +run dist/s_java 0555 +run dist/s_perm 0555 +run dist/s_readme 0555 +run dist/s_recover 0555 +run dist/s_symlink 0555 +run dist/s_tags 0555 +run dist/s_tcl 0555 +run dist/s_win32 0555 +run perl.BerkeleyDB/dbinfo 0555 +run perl.BerkeleyDB/mkpod 0555 diff --git a/bdb/dist/s_readme b/bdb/dist/s_readme new file mode 100755 index 00000000000..9ff8a69bc88 --- /dev/null +++ b/bdb/dist/s_readme @@ -0,0 +1,18 @@ +#!/bin/sh - +# $Id: s_readme,v 1.2 2000/01/27 21:42:18 bostic Exp $ +# +# Build the README. + +. RELEASE + +f=../README +echo "Building $f" +rm -f $f +(echo "$DB_VERSION_STRING" && + echo "" && + echo -n "This is version " && + echo -n "$DB_VERSION_MAJOR.$DB_VERSION_MINOR.$DB_VERSION_PATCH" && + echo " of Berkeley DB from Sleepycat Software. To view" && + echo "the release and installation documentation, load the distribution file" && + echo "docs/index.html into your web browser.") > $f +chmod 444 $f diff --git a/bdb/dist/s_recover b/bdb/dist/s_recover new file mode 100755 index 00000000000..0e8b3731c77 --- /dev/null +++ b/bdb/dist/s_recover @@ -0,0 +1,56 @@ +#!/bin/sh - +# $Id: s_recover,v 1.3 2000/03/30 05:24:36 krinsky Exp $ +# +# Build the automatically generated logging/recovery files. + +DIR="db btree hash log qam txn" + +t=/tmp/__db_$$ +loglist=../test/logtrack.list +rm -f $t +rm -f $loglist + +trap 'rm -f $t; exit 1' 1 2 3 13 15 + +# Check to make sure we haven't duplicated a log record entry, and build +# the list of log record types that the test suite uses. +for i in $DIR; do + p=none + for f in ../$i/*.src; do + # Grab the PREFIX; there should only be one per file, and + # so it's okay to just take the first. + grep '^PREFIX' $f | head -1 + egrep '^DEPRECATED[ ]|^BEGIN[ ]' $f | \ + awk '{print $1 "\t" $2 "\t" $3}' + + done +done > $loglist +grep -v '^PREFIX' $loglist | awk '{print $2 "\t" $3}' | sort +1 -n | \ + uniq -d -f 1 > $t +[ -s $t ] && { + echo "DUPLICATE LOG VALUES:" + cat $t + rm -f $t + exit 1 +} +rm -f $t + +for i in db btree hash log qam txn; do + for f in ../$i/*.src; do + subsystem=`basename $f .src` + header_file=../include/${subsystem}_auto.h + source_file=../$i/${subsystem}_auto.c + template_file=template/rec_${subsystem} + template_source=. + + echo "Building $source_file, $header_file, $template_file" + rm -f $header_file $source_file $template_file + awk -f gen_rec.awk \ + -v subsystem=$subsystem \ + -v source_file=$source_file \ + -v header_file=$header_file \ + -v template_file=$template_file \ + -v template_dir=. < $f + chmod 444 $header_file $source_file $template_file + done +done diff --git a/bdb/dist/s_rpc b/bdb/dist/s_rpc new file mode 100644 index 00000000000..88c9f47cbf4 --- /dev/null +++ b/bdb/dist/s_rpc @@ -0,0 +1,70 @@ +#!/bin/sh - +# $Id: s_rpc,v 11.6 2000/04/26 19:15:51 sue Exp $ +# +# Build the automatically generated RPC files + +echo "Building RPC client/server files" + +client_file=../rpc_client/gen_client.c +cproto_file=../include/gen_client_ext.h +ctmpl_file=./template/gen_client_ret +header_file=../include/db_server.h +rpcclnt_file=../rpc_client/db_server_clnt.c +rpcsvc_file=../rpc_server/db_server_svc.c +rpcxdr_file=../rpc_server/db_server_xdr.c +sed_file=../rpc_server/db_server_proc.sed +server_file=../rpc_server/gen_db_server.c +sproto_file=../include/gen_server_ext.h +stmpl_file=./template/db_server_proc +xdr_file=../rpc_server/db_server.x + +# +# NOTE: We do NOT want to remove proc_file. It is what we apply +# sed_file to, but we do not want to remove it. +# +proc_file=../rpc_server/db_server_proc.c +svrsed_file=../rpc_server/db_server_svc.sed +rpcsed_file=../rpc_server/db_server.sed + +rm -f $client_file $cproto_file $ctmpl_file $header_file $rpcsvc_file \ + $rpcclnt_file $rpcxdr_file $sed_file $server_file $sproto_file \ + $stmpl_file $xdr_file + +# +# Generate client/server/XDR code +# +awk -f gen_rpc.awk \ + -v client_file=$client_file \ + -v cproto_file=$cproto_file \ + -v ctmpl_file=$ctmpl_file \ + -v sed_file=$sed_file \ + -v server_file=$server_file \ + -v sproto_file=$sproto_file \ + -v stmpl_file=$stmpl_file \ + -v xdr_file=$xdr_file < ../rpc_server/rpc.src +chmod 444 $client_file $server_file + +# +# Now run rpcgen to generate all our sources from the XDR file +# +rpcgen -h $xdr_file > $header_file +rpcgen -l $xdr_file > $rpcclnt_file +rpcgen -s tcp $xdr_file > $rpcsvc_file +rpcgen -c $xdr_file > $rpcxdr_file + +# Run server files through sed +sed -f $svrsed_file $rpcsvc_file > ${rpcsvc_file}.new +mv ${rpcsvc_file}.new $rpcsvc_file +sed -f $sed_file $proc_file > ${proc_file}.new +mv ${proc_file}.new $proc_file + +# Run rpcgen files through sed to add HAVE_RPC ifdef +sed -f $rpcsed_file $rpcsvc_file > ${rpcsvc_file}.new +mv ${rpcsvc_file}.new $rpcsvc_file +sed -f $rpcsed_file $rpcxdr_file > ${rpcxdr_file}.new +mv ${rpcxdr_file}.new $rpcxdr_file +sed -f $rpcsed_file $rpcclnt_file > ${rpcclnt_file}.new +mv ${rpcclnt_file}.new $rpcclnt_file + +chmod 444 $header_file $rpcclnt_file $rpcsvc_file $rpcxdr_file + diff --git a/bdb/dist/s_symlink b/bdb/dist/s_symlink new file mode 100755 index 00000000000..70efa445521 --- /dev/null +++ b/bdb/dist/s_symlink @@ -0,0 +1,91 @@ +#!/bin/sh - +# $Id: s_symlink,v 1.9 2000/09/05 21:27:04 bostic Exp $ + +echo 'Creating Berkeley DB source tree symbolic links...' + +build() +{ + echo " $1 -> $2" + (cd ../`dirname $1` && rm -f `basename $1` && ln -s $2 `basename $1`) +} + +build btree/tags ../dist/tags +build build_unix/tags ../dist/tags +build clib/tags ../dist/tags +build common/tags ../dist/tags +build cxx/tags ../dist/tags +build db/tags ../dist/tags +build db185/tags ../dist/tags +build db_archive/tags ../dist/tags +build db_checkpoint/tags ../dist/tags +build db_deadlock/tags ../dist/tags +build db_dump/tags ../dist/tags +build db_dump185/tags ../dist/tags +build db_load/tags ../dist/tags +build db_printlog/tags ../dist/tags +build db_recover/tags ../dist/tags +build db_stat/tags ../dist/tags +build db_upgrade/tags ../dist/tags +build db_verify/tags ../dist/tags +build dbm/tags ../dist/tags +build docs_src/api_cxx/Makefile ../api_c/Makefile +build docs_src/api_cxx/m4.seealso ../api_c/m4.seealso +build docs_src/api_cxx/spell.ok ../api_c/spell.ok +build docs_src/api_java/Makefile ../api_c/Makefile +build docs_src/api_java/java_index.so ../api_cxx/cxx_index.so +build docs_src/api_java/m4.seealso ../api_c/m4.seealso +build docs_src/api_java/spell.ok ../api_c/spell.ok +build docs_src/api_tcl/spell.ok ../api_c/spell.ok +build docs_src/ref/am/spell.ok ../spell.ok +build docs_src/ref/am_conf/spell.ok ../spell.ok +build docs_src/ref/arch/spell.ok ../spell.ok +build docs_src/ref/build_unix/spell.ok ../spell.ok +build docs_src/ref/build_vxworks/spell.ok ../spell.ok +build docs_src/ref/build_win/spell.ok ../spell.ok +build docs_src/ref/cam/spell.ok ../spell.ok +build docs_src/ref/debug/spell.ok ../spell.ok +build docs_src/ref/distrib/spell.ok ../spell.ok +build docs_src/ref/dumpload/spell.ok ../spell.ok +build docs_src/ref/env/spell.ok ../spell.ok +build docs_src/ref/install/spell.ok ../spell.ok +build docs_src/ref/intro/spell.ok ../spell.ok +build docs_src/ref/java/spell.ok ../spell.ok +build docs_src/ref/lock/spell.ok ../spell.ok +build docs_src/ref/log/spell.ok ../spell.ok +build docs_src/ref/mp/spell.ok ../spell.ok +build docs_src/ref/perl/spell.ok ../spell.ok +build docs_src/ref/program/spell.ok ../spell.ok +build docs_src/ref/refs/spell.ok ../spell.ok +build docs_src/ref/rpc/spell.ok ../spell.ok +build docs_src/ref/sendmail/spell.ok ../spell.ok +build docs_src/ref/simple_tut/spell.ok ../spell.ok +build docs_src/ref/tcl/spell.ok ../spell.ok +build docs_src/ref/test/spell.ok ../spell.ok +build docs_src/ref/transapp/spell.ok ../spell.ok +build docs_src/ref/txn/spell.ok ../spell.ok +build docs_src/ref/upgrade.2.0/spell.ok ../spell.ok +build docs_src/ref/upgrade.3.0/spell.ok ../spell.ok +build docs_src/ref/upgrade.3.1/spell.ok ../spell.ok +build docs_src/ref/upgrade.3.2/spell.ok ../spell.ok +build docs_src/ref/xa/spell.ok ../spell.ok +build env/tags ../dist/tags +build examples_c/tags ../dist/tags +build examples_cxx/tags ../dist/tags +build examples_java java/src/com/sleepycat/examples +build hash/tags ../dist/tags +build hsearch/tags ../dist/tags +build include/tags ../dist/tags +build libdb_java/tags ../dist/tags +build lock/tags ../dist/tags +build log/tags ../dist/tags +build mp/tags ../dist/tags +build mutex/tags ../dist/tags +build os/tags ../dist/tags +build os_vxworks/tags ../dist/tags +build os_win32/tags ../dist/tags +build qam/tags ../dist/tags +build rpc_client/tags ../dist/tags +build rpc_server/tags ../dist/tags +build tcl/tags ../dist/tags +build txn/tags ../dist/tags +build xa/tags ../dist/tags diff --git a/bdb/dist/s_tags b/bdb/dist/s_tags new file mode 100755 index 00000000000..834600b9fb1 --- /dev/null +++ b/bdb/dist/s_tags @@ -0,0 +1,47 @@ +#!/bin/sh - +# $Id: s_tags,v 1.5 2000/09/05 21:27:04 bostic Exp $ +# +# Build tags files. + +files="../include/*.h \ + ../include/*.src \ + ../btree/*.[ch] \ + ../clib/*.[ch] \ + ../common/*.[ch] \ + ../db/*.[ch] \ + ../db185/*.[ch] \ + ../dbm/*.[ch] \ + ../env/*.[ch] \ + ../hash/*.[ch] \ + ../hsearch/*.[ch] \ + ../libdb_java/*.[ch] \ + ../lock/*.[ch] \ + ../log/*.[ch] \ + ../mp/*.[ch] \ + ../mutex/*.[ch] \ + ../os/*.[ch] \ + ../qam/*.[ch] \ + ../rpc_client/*.[ch] \ + ../rpc_server/*.[ch] \ + ../tcl/*.[ch] \ + ../txn/*.[ch] \ + ../xa/*.[ch]" + +f=tags +echo "Building $f" +rm -f $f + +# Figure out what flags this ctags accepts. +flags="" +if ctags -d ../db/db.c 2>/dev/null; then + flags="-d $flags" +fi +if ctags -t ../db/db.c 2>/dev/null; then + flags="-t $flags" +fi +if ctags -w ../db/db.c 2>/dev/null; then + flags="-w $flags" +fi + +ctags $flags $files 2>/dev/null +chmod 444 $f diff --git a/bdb/dist/s_tcl b/bdb/dist/s_tcl new file mode 100755 index 00000000000..7350e9a49e9 --- /dev/null +++ b/bdb/dist/s_tcl @@ -0,0 +1,53 @@ +#!/bin/sh - +# $Id: s_tcl,v 1.14 2000/11/09 19:24:07 sue Exp $ +# +# Build the Tcl test files. + +msgshb="# DO NOT EDIT BELOW THIS LINE: automatically built by dist/s_tcl." + +. RELEASE + +f=../test/include.tcl +echo "Building $f" +rm -f $f +(echo "set tclsh_path @TCL_TCLSH@" && \ + echo "set tcllib .libs/libdb_tcl-@DB_VERSION_MAJOR@.@DB_VERSION_MINOR@.@SOSUFFIX@" && \ + echo "set rpc_server localhost" && \ + echo "set rpc_path ." && \ + echo "set test_path @srcdir@/../test" && \ + echo "" && \ + echo "set KILL \"@db_cv_path_kill@\"" && \ + echo "" && \ + echo "$msgshb" && \ + echo "" && \ + echo "global dict" && \ + echo "global testdir" && \ + echo "global util_path" && \ + echo "set testdir ./TESTDIR" && \ + echo "set rpc_testdir \$rpc_path/TESTDIR" && \ + echo "" && \ + echo "global is_hp_test" && \ + echo "global is_qnx_test" && \ + echo "global is_windows_test") > $f +chmod 444 $f + +f=../build_win32/include.tcl +echo "Building $f" +rm -f $f +(echo "set tclsh_path SET_YOUR_TCLSH_PATH" && \ + echo "set test_path ../test" && \ + echo "set tcllib ./Debug/libdb_tcl${DB_VERSION_MAJOR}${DB_VERSION_MINOR}d.dll" && \ + echo "" && \ + echo "set KILL ./dbkill.exe" && \ + echo "" && \ + echo "$msgshb" && \ + echo "" && \ + echo "global dict" && \ + echo "global testdir" && \ + echo "global util_path" && \ + echo "set testdir ./TESTDIR" && \ + echo "" && \ + echo "global is_hp_test" && \ + echo "global is_qnx_test" && \ + echo "global is_windows_test") > $f +chmod 444 $f diff --git a/bdb/dist/s_vxworks b/bdb/dist/s_vxworks new file mode 100644 index 00000000000..edf058df7ee --- /dev/null +++ b/bdb/dist/s_vxworks @@ -0,0 +1,48 @@ +#!/bin/sh - +# $Id: s_vxworks,v 1.3 2000/07/13 18:38:46 bostic Exp $ +# +# Build the VxWorks files. + +msgc="/* DO NOT EDIT: automatically built by dist/s_vxworks. */" + +. RELEASE + +t=/tmp/__db_$$ +rm -f $t + +trap 'rm -f $t ; exit 1' 1 2 3 13 15 + +f=../build_vxworks/db.h +echo "Building $f" +rm -f $f +cat <<ENDOFSEDTEXT > $t +s/@u_int8_decl@/typedef unsigned char u_int8_t;/ +s/@u_int16_decl@/typedef unsigned short u_int16_t;/ +s/@u_int32_decl@/typedef unsigned int u_int32_t;/ +/@int16_decl@/d +/@int32_decl@/d +/@u_char_decl@/d +/@u_short_decl@/d +/@u_int_decl@/d +/@u_long_decl@/d +/@ssize_t_decl@/d +s/@DB_VERSION_MAJOR@/$DB_VERSION_MAJOR/ +s/@DB_VERSION_MINOR@/$DB_VERSION_MINOR/ +s/@DB_VERSION_PATCH@/$DB_VERSION_PATCH/ +s/@DB_VERSION_STRING@/"$DB_VERSION_STRING"/ +ENDOFSEDTEXT +(echo "$msgc" && sed -f $t ../include/db.src) > $f +chmod 444 $f + +f=../build_vxworks/db_int.h +echo "Building $f" +rm -f $f +cat <<ENDOFSEDTEXT > $t +s/\(PATH_SEPARATOR[^"]*"\)\/"/\1\/\\\\\\\\\\"/ +s/@db_align_t_decl@/typedef unsigned long db_align_t;/ +s/@db_alignp_t_decl@/typedef unsigned long db_alignp_t;/ +ENDOFSEDTEXT +(echo "$msgc" && sed -f $t ../include/db_int.src) > $f +chmod 444 $f + +rm -f $t diff --git a/bdb/dist/s_win32 b/bdb/dist/s_win32 new file mode 100755 index 00000000000..f989a615e48 --- /dev/null +++ b/bdb/dist/s_win32 @@ -0,0 +1,67 @@ +#!/bin/sh - +# $Id: s_win32,v 1.9 2000/09/20 15:29:54 bostic Exp $ +# +# Build Windows/32 include files. + +msgc="/* DO NOT EDIT: automatically built by dist/s_win32. */" + +. RELEASE + +t=/tmp/__db_$$ +rm -f $t + +trap 'rm -f $t ; exit 1' 1 2 3 13 15 + +f=../build_win32/db.h +echo "Building $f" +rm -f $f +cat <<ENDOFSEDTEXT > $t +s/@u_int8_decl@/typedef unsigned char u_int8_t;/ +s/@int16_decl@/typedef short int16_t;/ +s/@u_int16_decl@/typedef unsigned short u_int16_t;/ +s/@int32_decl@/typedef int int32_t;/ +s/@u_int32_decl@/typedef unsigned int u_int32_t;/ +/@u_char_decl@/{ + i\\ + #if !defined(_WINSOCKAPI_) + s/@u_char_decl@/typedef unsigned char u_char;/ +} +s/@u_short_decl@/typedef unsigned short u_short;/ +s/@u_int_decl@/typedef unsigned int u_int;/ +/@u_long_decl@/{ + s/@u_long_decl@/typedef unsigned long u_long;/ + a\\ + #endif +} +s/@ssize_t_decl@/typedef int ssize_t;/ +s/@DB_VERSION_MAJOR@/$DB_VERSION_MAJOR/ +s/@DB_VERSION_MINOR@/$DB_VERSION_MINOR/ +s/@DB_VERSION_PATCH@/$DB_VERSION_PATCH/ +s/@DB_VERSION_STRING@/"$DB_VERSION_STRING"/ +ENDOFSEDTEXT +(echo "$msgc" && sed -f $t ../include/db.src) > $f +chmod 444 $f + +f=../build_win32/db_int.h +echo "Building $f" +rm -f $f +cat <<ENDOFSEDTEXT > $t +s/\(PATH_SEPARATOR[^"]*"\)\/"/\1\\\\\\\\\\/:\"/ +s/@db_align_t_decl@/typedef unsigned long db_align_t;/ +s/@db_alignp_t_decl@/typedef unsigned long db_alignp_t;/ +ENDOFSEDTEXT +(echo "$msgc" && sed -f $t ../include/db_int.src) > $f +chmod 444 $f + +f=../build_win32/libdb.rc +echo "Building $f" +rm -f $f +cat <<ENDOFSEDTEXT > $t +s/%MAJOR%/$DB_VERSION_MAJOR/ +s/%MINOR%/$DB_VERSION_MINOR/ +s/%PATCH%/$DB_VERSION_PATCH/ +ENDOFSEDTEXT +sed -f $t ../build_win32/libdbrc.src > $f +chmod 444 $f + +rm -f $t diff --git a/bdb/dist/s_win32_dsp b/bdb/dist/s_win32_dsp new file mode 100644 index 00000000000..8abee7c1a61 --- /dev/null +++ b/bdb/dist/s_win32_dsp @@ -0,0 +1,98 @@ +#!/bin/sh - +# $Id: s_win32_dsp,v 1.3 2000/12/02 04:36:47 dda Exp $ +# +# Build Windows/32 .dsp files. + +. RELEASE + +BUILDDIR=../build_win32 +SRCFILES=srcfiles.in + +create_dsp() +{ + projname="$1" # name of the .dsp file + match="$2" # the string used to egrep the $sources file + sources="$3" # a modified version of $SRCFILES to facilitate matches + dsptemplate="$4" # overall template file for the .dsp + srctemplate="$5" # template file for the src file fragments + + dspoutput=$BUILDDIR/$projname.dsp + + echo "Building $dspoutput" + rm -f $dspoutput.insert + for srcpath in `egrep "$match" $sources | sed -e 's/[ ].*//'` + do + # take the path name and break it up, converting / to \\. + # so many backslashes needed because of shell quoting and + # sed quoting -- we'll end up with two backslashes for every + # forward slash, but we need that when feeding that to the + # later sed command. + set - `echo $srcpath | sed -e 's;\(.*\)/;../\\1 ;' \ + -e 's;../build_win32;.;' \ + -e 's;/;\\\\\\\\;g'` + srcdir="$1" + srcfile="$2" + sed -e "s/@srcdir@/$srcdir/g" \ + -e "s/@srcfile@/$srcfile/g" \ + < $srctemplate >> $dspoutput.insert + done + sed -e "/@SOURCE_FILES@/r$dspoutput.insert" \ + -e "/@SOURCE_FILES@/d" \ + -e "s/@project_name@/$projname/g" \ + -e "s/@DB_VERSION_MAJOR@/$DB_VERSION_MAJOR/g" \ + -e "s/@DB_VERSION_MINOR@/$DB_VERSION_MINOR/g" \ + < $dsptemplate > $dspoutput.new + rm -f $dspoutput $dspoutput.insert + mv $dspoutput.new $dspoutput +} + +TMPA=/tmp/swin32dsp$$a +trap "rm -f $TMPA; exit 1" 1 2 3 15 + +# create a copy of the srcfiles with comments and 'skip' lines removed. +# add a space at the end of each list of modules so that each module +# can be unambiguously matched e.g. ' dynamic ' +# +sed -e "s/#.*$//" \ + -e "/^[ ]*$/d" \ + -e "s/[ ][ ]*/ /" \ + -e "s/[ ]*$//" \ + -e "/ skip$/d" \ + -e "s/$/ /" < $SRCFILES > $TMPA + +# get a list of all modules mentioned +# +MODULES="`sed -e 's/^[^ ]* //' < $TMPA \ + | tr ' ' '\012' | sort | uniq`" + +for module in $MODULES +do + case "$module" in + dynamic ) + create_dsp db_dll " $module " $TMPA \ + $BUILDDIR/dynamic_dsp.src $BUILDDIR/srcfile_dsp.src + ;; + java ) + create_dsp db_java " $module " $TMPA \ + $BUILDDIR/java_dsp.src $BUILDDIR/srcfile_dsp.src + ;; + tcl ) + create_dsp db_tcl " $module " $TMPA \ + $BUILDDIR/tcl_dsp.src $BUILDDIR/srcfile_dsp.src + ;; + static ) + create_dsp db_static " $module " $TMPA \ + $BUILDDIR/static_dsp.src $BUILDDIR/srcfile_dsp.src + ;; + app=* ) + appname=`echo $module | sed -e 's/^app=//'` + create_dsp $appname " $module " $TMPA \ + $BUILDDIR/app_dsp.src $BUILDDIR/srcfile_dsp.src + ;; + * ) + echo "s_win32_dsp: module name $module in $SRCFILES is unknown type" + ;; + esac +done + +rm -f $TMPA diff --git a/bdb/dist/srcfiles.in b/bdb/dist/srcfiles.in new file mode 100644 index 00000000000..bfc564e13bb --- /dev/null +++ b/bdb/dist/srcfiles.in @@ -0,0 +1,269 @@ +# $Id: srcfiles.in,v 1.7 2000/11/30 18:42:21 dda Exp $ +# +# This is an input file for the s_win32_dsp script. It describes every +# source files used by Windows, and lists those that aren't as well, +# as a completeness sanity check. +# +# Please keep this list sorted alphabetically! +# +# Each non-blank, non-comment line is of the form +# filename module [ module ...] +# +# The possible modules, including the name of the project (.dsp) file: +# +# app=NAME this is linked into application NAME.exe (db_NAME.dsp) +# dynamic file appears in the DLL (db_dll.dsp) +# java file appears in the java DLL (db_java.dsp) +# skip this file is not used by Windows +# static file appears in the static library (db_static.dsp) +# tcl file appears in the tcl DLL (db_tcl.dsp) + +btree/bt_compare.c dynamic static +btree/bt_conv.c dynamic static +btree/bt_curadj.c dynamic static +btree/bt_cursor.c dynamic static +btree/bt_delete.c dynamic static +btree/bt_method.c dynamic static +btree/bt_open.c dynamic static +btree/bt_put.c dynamic static +btree/bt_rec.c dynamic static +btree/bt_reclaim.c dynamic static +btree/bt_recno.c dynamic static +btree/bt_rsearch.c dynamic static +btree/bt_search.c dynamic static +btree/bt_split.c dynamic static +btree/bt_stat.c dynamic static +btree/bt_upgrade.c dynamic static +btree/bt_verify.c dynamic static +btree/btree_auto.c dynamic static +build_win32/dbkill.cpp skip +build_win32/dllmain.c dynamic +build_win32/libdb.def dynamic +build_win32/libdb.rc dynamic +build_win32/libdb_tcl.def tcl +clib/getcwd.c skip +clib/getopt.c skip # must be linked into each app +clib/memcmp.c skip +clib/memmove.c skip +clib/raise.c skip +clib/snprintf.c skip +clib/strcasecmp.c dynamic static +clib/strerror.c skip +clib/vsnprintf.c skip +common/db_byteorder.c dynamic static +common/db_err.c dynamic static +common/db_getlong.c dynamic static +common/db_log2.c dynamic static +common/util_log.c dynamic static +common/util_sig.c dynamic static +cxx/cxx_app.cpp dynamic static +cxx/cxx_except.cpp dynamic static +cxx/cxx_lock.cpp dynamic static +cxx/cxx_log.cpp dynamic static +cxx/cxx_mpool.cpp dynamic static +cxx/cxx_table.cpp dynamic static +cxx/cxx_txn.cpp dynamic static +db/crdel_auto.c dynamic static +db/crdel_rec.c dynamic static +db/db.c dynamic static +db/db_am.c dynamic static +db/db_auto.c dynamic static +db/db_cam.c dynamic static +db/db_conv.c dynamic static +db/db_dispatch.c dynamic static +db/db_dup.c dynamic static +db/db_iface.c dynamic static +db/db_join.c dynamic static +db/db_meta.c dynamic static +db/db_method.c dynamic static +db/db_overflow.c dynamic static +db/db_pr.c dynamic static +db/db_rec.c dynamic static +db/db_reclaim.c dynamic static +db/db_ret.c dynamic static +db/db_upg.c dynamic static +db/db_upg_opd.c dynamic static +db/db_vrfy.c dynamic static +db/db_vrfyutil.c dynamic static +db185/db185.c skip +db_archive/db_archive.c app=db_archive +db_checkpoint/db_checkpoint.c app=db_checkpoint +db_deadlock/db_deadlock.c app=db_deadlock +db_dump/db_dump.c app=db_dump +db_dump185/db_dump185.c skip +db_load/db_load.c app=db_load +db_printlog/db_printlog.c app=db_printlog +db_recover/db_recover.c app=db_recover +db_stat/db_stat.c app=db_stat +db_upgrade/db_upgrade.c app=db_upgrade +db_verify/db_verify.c app=db_verify +dbm/dbm.c dynamic static +env/db_salloc.c dynamic static +env/db_shash.c dynamic static +env/env_method.c dynamic static +env/env_open.c dynamic static +env/env_recover.c dynamic static +env/env_region.c dynamic static +examples_c/ex_access.c app=ex_access +examples_c/ex_btrec.c app=ex_btrec +examples_c/ex_dbclient.c skip +examples_c/ex_env.c app=ex_env +examples_c/ex_lock.c app=ex_lock +examples_c/ex_mpool.c app=ex_mpool +examples_c/ex_thread.c skip +examples_c/ex_tpcb.c app=ex_tpcb +examples_cxx/AccessExample.cpp app=excxx_access +examples_cxx/BtRecExample.cpp app=excxx_btrec +examples_cxx/EnvExample.cpp app=excxx_env +examples_cxx/LockExample.cpp app=excxx_lock +examples_cxx/MpoolExample.cpp app=excxx_mpool +examples_cxx/TpcbExample.cpp app=excxx_tpcb +hash/hash.c dynamic static +hash/hash_auto.c dynamic static +hash/hash_conv.c dynamic static +hash/hash_dup.c dynamic static +hash/hash_func.c dynamic static +hash/hash_meta.c dynamic static +hash/hash_method.c dynamic static +hash/hash_page.c dynamic static +hash/hash_rec.c dynamic static +hash/hash_reclaim.c dynamic static +hash/hash_stat.c dynamic static +hash/hash_upgrade.c dynamic static +hash/hash_verify.c dynamic static +hsearch/hsearch.c dynamic static +libdb_java/java_Db.c java +libdb_java/java_DbEnv.c java +libdb_java/java_DbLock.c java +libdb_java/java_DbLsn.c java +libdb_java/java_DbTxn.c java +libdb_java/java_Dbc.c java +libdb_java/java_Dbt.c java +libdb_java/java_info.c java +libdb_java/java_locked.c java +libdb_java/java_util.c java +lock/lock.c dynamic static +lock/lock_conflict.c dynamic static +lock/lock_deadlock.c dynamic static +lock/lock_method.c dynamic static +lock/lock_region.c dynamic static +lock/lock_stat.c dynamic static +lock/lock_util.c dynamic static +log/log.c dynamic static +log/log_archive.c dynamic static +log/log_auto.c dynamic static +log/log_compare.c dynamic static +log/log_findckp.c dynamic static +log/log_get.c dynamic static +log/log_method.c dynamic static +log/log_put.c dynamic static +log/log_rec.c dynamic static +log/log_register.c dynamic static +mp/mp_alloc.c dynamic static +mp/mp_bh.c dynamic static +mp/mp_fget.c dynamic static +mp/mp_fopen.c dynamic static +mp/mp_fput.c dynamic static +mp/mp_fset.c dynamic static +mp/mp_method.c dynamic static +mp/mp_region.c dynamic static +mp/mp_register.c dynamic static +mp/mp_stat.c dynamic static +mp/mp_sync.c dynamic static +mp/mp_trickle.c dynamic static +mutex/mut_fcntl.c skip +mutex/mut_pthread.c skip +mutex/mut_tas.c dynamic static +mutex/mutex.c dynamic static +os/os_abs.c skip +os/os_alloc.c dynamic static +os/os_dir.c skip +os/os_errno.c skip +os/os_fid.c skip +os/os_finit.c skip +os/os_fsync.c dynamic static +os/os_handle.c dynamic static +os/os_map.c skip +os/os_method.c dynamic static +os/os_oflags.c dynamic static +os/os_open.c skip +os/os_region.c dynamic static +os/os_rename.c skip +os/os_root.c dynamic static +os/os_rpath.c dynamic static +os/os_rw.c dynamic static +os/os_seek.c skip +os/os_sleep.c skip +os/os_spin.c skip +os/os_stat.c dynamic static +os/os_tmpdir.c dynamic static +os/os_unlink.c dynamic static +os_vxworks/os_abs.c skip +os_vxworks/os_finit.c skip +os_vxworks/os_map.c skip +os_win32/os_abs.c dynamic static +os_win32/os_dir.c dynamic static +os_win32/os_errno.c dynamic static +os_win32/os_fid.c dynamic static +os_win32/os_finit.c dynamic static +os_win32/os_map.c dynamic static +os_win32/os_open.c dynamic static +os_win32/os_rename.c dynamic static +os_win32/os_seek.c dynamic static +os_win32/os_sleep.c dynamic static +os_win32/os_spin.c dynamic static +os_win32/os_type.c dynamic static +qam/qam.c dynamic static +qam/qam_auto.c dynamic static +qam/qam_conv.c dynamic static +qam/qam_files.c dynamic static +qam/qam_method.c dynamic static +qam/qam_open.c dynamic static +qam/qam_rec.c dynamic static +qam/qam_stat.c dynamic static +qam/qam_upgrade.c dynamic static +qam/qam_verify.c dynamic static +rpc_client/client.c skip +rpc_client/db_server_clnt.c skip +rpc_client/gen_client.c skip +rpc_client/gen_client_ret.c skip +rpc_server/db_server_proc.c skip +rpc_server/db_server_svc.c skip +rpc_server/db_server_util.c skip +rpc_server/db_server_xdr.c skip +rpc_server/gen_db_server.c skip +tcl/tcl_compat.c tcl +tcl/tcl_db.c tcl +tcl/tcl_db_pkg.c tcl +tcl/tcl_dbcursor.c tcl +tcl/tcl_env.c tcl +tcl/tcl_internal.c tcl +tcl/tcl_lock.c tcl +tcl/tcl_log.c tcl +tcl/tcl_mp.c tcl +tcl/tcl_txn.c tcl +test_server/dbs.c skip +test_server/dbs_am.c skip +test_server/dbs_checkpoint.c skip +test_server/dbs_debug.c skip +test_server/dbs_handles.c skip +test_server/dbs_log.c skip +test_server/dbs_qam.c skip +test_server/dbs_spawn.c skip +test_server/dbs_trickle.c skip +test_server/dbs_util.c skip +test_server/dbs_yield.c skip +test_thread/lock.c skip +test_thread/log.c skip +test_thread/mpool.c skip +test_thread/mutex.c skip +test_vxworks/vx_mutex.c skip +test_vxworks/vxtpcb_files.c skip +test_vxworks/vxtpcb_onefile.c skip +txn/txn.c dynamic static +txn/txn_auto.c dynamic static +txn/txn_rec.c dynamic static +txn/txn_region.c dynamic static +xa/xa.c dynamic static +xa/xa_db.c dynamic static +xa/xa_map.c dynamic static diff --git a/bdb/dist/template/db_server_proc b/bdb/dist/template/db_server_proc new file mode 100644 index 00000000000..3fc73221817 --- /dev/null +++ b/bdb/dist/template/db_server_proc @@ -0,0 +1,1057 @@ +/* Do not edit: automatically built by gen_rpc.awk. */ +#include "db_config.h" + +#ifndef NO_SYSTEM_INCLUDES +#include <sys/types.h> + +#include <rpc/rpc.h> + +#include <errno.h> +#include <string.h> +#include "db_server.h" +#endif + +#include "db_int.h" +#include "db_server_int.h" +#include "rpc_server_ext.h" + +#include "gen_server_ext.h" + +/* BEGIN __env_cachesize_1_proc */ +void +__env_cachesize_1_proc(dbenvcl_id, gbytes, bytes, + ncache, replyp) + long dbenvcl_id; + u_int32_t gbytes; + u_int32_t bytes; + u_int32_t ncache; + __env_cachesize_reply *replyp; +/* END __env_cachesize_1_proc */ +{ + int ret; + DB_ENV * dbenv; + ct_entry *dbenv_ctp; + + ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV); + dbenv = (DB_ENV *)dbenv_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __env_close_1_proc */ +void +__env_close_1_proc(dbenvcl_id, flags, replyp) + long dbenvcl_id; + u_int32_t flags; + __env_close_reply *replyp; +/* END __env_close_1_proc */ +{ + int ret; + DB_ENV * dbenv; + ct_entry *dbenv_ctp; + + ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV); + dbenv = (DB_ENV *)dbenv_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __env_create_1_proc */ +void +__env_create_1_proc(timeout, replyp) + u_int32_t timeout; + __env_create_reply *replyp; +/* END __env_create_1_proc */ +{ + int ret; + + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __env_flags_1_proc */ +void +__env_flags_1_proc(dbenvcl_id, flags, onoff, replyp) + long dbenvcl_id; + u_int32_t flags; + u_int32_t onoff; + __env_flags_reply *replyp; +/* END __env_flags_1_proc */ +{ + int ret; + DB_ENV * dbenv; + ct_entry *dbenv_ctp; + + ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV); + dbenv = (DB_ENV *)dbenv_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __env_open_1_proc */ +void +__env_open_1_proc(dbenvcl_id, home, flags, + mode, replyp) + long dbenvcl_id; + char *home; + u_int32_t flags; + u_int32_t mode; + __env_open_reply *replyp; +/* END __env_open_1_proc */ +{ + int ret; + DB_ENV * dbenv; + ct_entry *dbenv_ctp; + + ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV); + dbenv = (DB_ENV *)dbenv_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __env_remove_1_proc */ +void +__env_remove_1_proc(dbenvcl_id, home, flags, replyp) + long dbenvcl_id; + char *home; + u_int32_t flags; + __env_remove_reply *replyp; +/* END __env_remove_1_proc */ +{ + int ret; + DB_ENV * dbenv; + ct_entry *dbenv_ctp; + + ACTIVATE_CTP(dbenv_ctp, dbenvcl_id, CT_ENV); + dbenv = (DB_ENV *)dbenv_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __txn_abort_1_proc */ +void +__txn_abort_1_proc(txnpcl_id, replyp) + long txnpcl_id; + __txn_abort_reply *replyp; +/* END __txn_abort_1_proc */ +{ + int ret; + DB_TXN * txnp; + ct_entry *txnp_ctp; + + ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN); + txnp = (DB_TXN *)txnp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __txn_begin_1_proc */ +void +__txn_begin_1_proc(envpcl_id, parentcl_id, + flags, replyp) + long envpcl_id; + long parentcl_id; + u_int32_t flags; + __txn_begin_reply *replyp; +/* END __txn_begin_1_proc */ +{ + int ret; + DB_ENV * envp; + ct_entry *envp_ctp; + DB_TXN * parent; + ct_entry *parent_ctp; + + ACTIVATE_CTP(envp_ctp, envpcl_id, CT_ENV); + envp = (DB_ENV *)envp_ctp->ct_anyp; + ACTIVATE_CTP(parent_ctp, parentcl_id, CT_TXN); + parent = (DB_TXN *)parent_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __txn_commit_1_proc */ +void +__txn_commit_1_proc(txnpcl_id, flags, replyp) + long txnpcl_id; + u_int32_t flags; + __txn_commit_reply *replyp; +/* END __txn_commit_1_proc */ +{ + int ret; + DB_TXN * txnp; + ct_entry *txnp_ctp; + + ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN); + txnp = (DB_TXN *)txnp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_bt_maxkey_1_proc */ +void +__db_bt_maxkey_1_proc(dbpcl_id, maxkey, replyp) + long dbpcl_id; + u_int32_t maxkey; + __db_bt_maxkey_reply *replyp; +/* END __db_bt_maxkey_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_bt_minkey_1_proc */ +void +__db_bt_minkey_1_proc(dbpcl_id, minkey, replyp) + long dbpcl_id; + u_int32_t minkey; + __db_bt_minkey_reply *replyp; +/* END __db_bt_minkey_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_close_1_proc */ +void +__db_close_1_proc(dbpcl_id, flags, replyp) + long dbpcl_id; + u_int32_t flags; + __db_close_reply *replyp; +/* END __db_close_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_create_1_proc */ +void +__db_create_1_proc(flags, envpcl_id, replyp) + u_int32_t flags; + long envpcl_id; + __db_create_reply *replyp; +/* END __db_create_1_proc */ +{ + int ret; + DB_ENV * envp; + ct_entry *envp_ctp; + + ACTIVATE_CTP(envp_ctp, envpcl_id, CT_ENV); + envp = (DB_ENV *)envp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_del_1_proc */ +void +__db_del_1_proc(dbpcl_id, txnpcl_id, keydlen, + keydoff, keyflags, keydata, keysize, + flags, replyp) + long dbpcl_id; + long txnpcl_id; + u_int32_t keydlen; + u_int32_t keydoff; + u_int32_t keyflags; + void *keydata; + u_int32_t keysize; + u_int32_t flags; + __db_del_reply *replyp; +/* END __db_del_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + DB_TXN * txnp; + ct_entry *txnp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN); + txnp = (DB_TXN *)txnp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_extentsize_1_proc */ +void +__db_extentsize_1_proc(dbpcl_id, extentsize, replyp) + long dbpcl_id; + u_int32_t extentsize; + __db_extentsize_reply *replyp; +/* END __db_extentsize_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_flags_1_proc */ +void +__db_flags_1_proc(dbpcl_id, flags, replyp) + long dbpcl_id; + u_int32_t flags; + __db_flags_reply *replyp; +/* END __db_flags_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_get_1_proc */ +void +__db_get_1_proc(dbpcl_id, txnpcl_id, keydlen, + keydoff, keyflags, keydata, keysize, + datadlen, datadoff, dataflags, datadata, + datasize, flags, replyp, freep) + long dbpcl_id; + long txnpcl_id; + u_int32_t keydlen; + u_int32_t keydoff; + u_int32_t keyflags; + void *keydata; + u_int32_t keysize; + u_int32_t datadlen; + u_int32_t datadoff; + u_int32_t dataflags; + void *datadata; + u_int32_t datasize; + u_int32_t flags; + __db_get_reply *replyp; + int * freep; +/* END __db_get_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + DB_TXN * txnp; + ct_entry *txnp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN); + txnp = (DB_TXN *)txnp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_h_ffactor_1_proc */ +void +__db_h_ffactor_1_proc(dbpcl_id, ffactor, replyp) + long dbpcl_id; + u_int32_t ffactor; + __db_h_ffactor_reply *replyp; +/* END __db_h_ffactor_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_h_nelem_1_proc */ +void +__db_h_nelem_1_proc(dbpcl_id, nelem, replyp) + long dbpcl_id; + u_int32_t nelem; + __db_h_nelem_reply *replyp; +/* END __db_h_nelem_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_key_range_1_proc */ +void +__db_key_range_1_proc(dbpcl_id, txnpcl_id, keydlen, + keydoff, keyflags, keydata, keysize, + flags, replyp) + long dbpcl_id; + long txnpcl_id; + u_int32_t keydlen; + u_int32_t keydoff; + u_int32_t keyflags; + void *keydata; + u_int32_t keysize; + u_int32_t flags; + __db_key_range_reply *replyp; +/* END __db_key_range_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + DB_TXN * txnp; + ct_entry *txnp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN); + txnp = (DB_TXN *)txnp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_lorder_1_proc */ +void +__db_lorder_1_proc(dbpcl_id, lorder, replyp) + long dbpcl_id; + u_int32_t lorder; + __db_lorder_reply *replyp; +/* END __db_lorder_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_open_1_proc */ +void +__db_open_1_proc(dbpcl_id, name, subdb, + type, flags, mode, replyp) + long dbpcl_id; + char *name; + char *subdb; + u_int32_t type; + u_int32_t flags; + u_int32_t mode; + __db_open_reply *replyp; +/* END __db_open_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_pagesize_1_proc */ +void +__db_pagesize_1_proc(dbpcl_id, pagesize, replyp) + long dbpcl_id; + u_int32_t pagesize; + __db_pagesize_reply *replyp; +/* END __db_pagesize_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_put_1_proc */ +void +__db_put_1_proc(dbpcl_id, txnpcl_id, keydlen, + keydoff, keyflags, keydata, keysize, + datadlen, datadoff, dataflags, datadata, + datasize, flags, replyp, freep) + long dbpcl_id; + long txnpcl_id; + u_int32_t keydlen; + u_int32_t keydoff; + u_int32_t keyflags; + void *keydata; + u_int32_t keysize; + u_int32_t datadlen; + u_int32_t datadoff; + u_int32_t dataflags; + void *datadata; + u_int32_t datasize; + u_int32_t flags; + __db_put_reply *replyp; + int * freep; +/* END __db_put_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + DB_TXN * txnp; + ct_entry *txnp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN); + txnp = (DB_TXN *)txnp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_re_delim_1_proc */ +void +__db_re_delim_1_proc(dbpcl_id, delim, replyp) + long dbpcl_id; + u_int32_t delim; + __db_re_delim_reply *replyp; +/* END __db_re_delim_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_re_len_1_proc */ +void +__db_re_len_1_proc(dbpcl_id, len, replyp) + long dbpcl_id; + u_int32_t len; + __db_re_len_reply *replyp; +/* END __db_re_len_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_re_pad_1_proc */ +void +__db_re_pad_1_proc(dbpcl_id, pad, replyp) + long dbpcl_id; + u_int32_t pad; + __db_re_pad_reply *replyp; +/* END __db_re_pad_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_remove_1_proc */ +void +__db_remove_1_proc(dbpcl_id, name, subdb, + flags, replyp) + long dbpcl_id; + char *name; + char *subdb; + u_int32_t flags; + __db_remove_reply *replyp; +/* END __db_remove_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_rename_1_proc */ +void +__db_rename_1_proc(dbpcl_id, name, subdb, + newname, flags, replyp) + long dbpcl_id; + char *name; + char *subdb; + char *newname; + u_int32_t flags; + __db_rename_reply *replyp; +/* END __db_rename_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_stat_1_proc */ +void +__db_stat_1_proc(dbpcl_id, + flags, replyp, freep) + long dbpcl_id; + u_int32_t flags; + __db_stat_reply *replyp; + int * freep; +/* END __db_stat_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_swapped_1_proc */ +void +__db_swapped_1_proc(dbpcl_id, replyp) + long dbpcl_id; + __db_swapped_reply *replyp; +/* END __db_swapped_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_sync_1_proc */ +void +__db_sync_1_proc(dbpcl_id, flags, replyp) + long dbpcl_id; + u_int32_t flags; + __db_sync_reply *replyp; +/* END __db_sync_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_cursor_1_proc */ +void +__db_cursor_1_proc(dbpcl_id, txnpcl_id, + flags, replyp) + long dbpcl_id; + long txnpcl_id; + u_int32_t flags; + __db_cursor_reply *replyp; +/* END __db_cursor_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + DB_TXN * txnp; + ct_entry *txnp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + ACTIVATE_CTP(txnp_ctp, txnpcl_id, CT_TXN); + txnp = (DB_TXN *)txnp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __db_join_1_proc */ +void +__db_join_1_proc(dbpcl_id, curslist, + flags, replyp) + long dbpcl_id; + u_int32_t * curslist; + u_int32_t flags; + __db_join_reply *replyp; +/* END __db_join_1_proc */ +{ + int ret; + DB * dbp; + ct_entry *dbp_ctp; + + ACTIVATE_CTP(dbp_ctp, dbpcl_id, CT_DB); + dbp = (DB *)dbp_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __dbc_close_1_proc */ +void +__dbc_close_1_proc(dbccl_id, replyp) + long dbccl_id; + __dbc_close_reply *replyp; +/* END __dbc_close_1_proc */ +{ + int ret; + DBC * dbc; + ct_entry *dbc_ctp; + + ACTIVATE_CTP(dbc_ctp, dbccl_id, CT_CURSOR); + dbc = (DBC *)dbc_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __dbc_count_1_proc */ +void +__dbc_count_1_proc(dbccl_id, flags, replyp) + long dbccl_id; + u_int32_t flags; + __dbc_count_reply *replyp; +/* END __dbc_count_1_proc */ +{ + int ret; + DBC * dbc; + ct_entry *dbc_ctp; + + ACTIVATE_CTP(dbc_ctp, dbccl_id, CT_CURSOR); + dbc = (DBC *)dbc_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __dbc_del_1_proc */ +void +__dbc_del_1_proc(dbccl_id, flags, replyp) + long dbccl_id; + u_int32_t flags; + __dbc_del_reply *replyp; +/* END __dbc_del_1_proc */ +{ + int ret; + DBC * dbc; + ct_entry *dbc_ctp; + + ACTIVATE_CTP(dbc_ctp, dbccl_id, CT_CURSOR); + dbc = (DBC *)dbc_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __dbc_dup_1_proc */ +void +__dbc_dup_1_proc(dbccl_id, flags, replyp) + long dbccl_id; + u_int32_t flags; + __dbc_dup_reply *replyp; +/* END __dbc_dup_1_proc */ +{ + int ret; + DBC * dbc; + ct_entry *dbc_ctp; + + ACTIVATE_CTP(dbc_ctp, dbccl_id, CT_CURSOR); + dbc = (DBC *)dbc_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __dbc_get_1_proc */ +void +__dbc_get_1_proc(dbccl_id, keydlen, keydoff, + keyflags, keydata, keysize, datadlen, + datadoff, dataflags, datadata, datasize, + flags, replyp, freep) + long dbccl_id; + u_int32_t keydlen; + u_int32_t keydoff; + u_int32_t keyflags; + void *keydata; + u_int32_t keysize; + u_int32_t datadlen; + u_int32_t datadoff; + u_int32_t dataflags; + void *datadata; + u_int32_t datasize; + u_int32_t flags; + __dbc_get_reply *replyp; + int * freep; +/* END __dbc_get_1_proc */ +{ + int ret; + DBC * dbc; + ct_entry *dbc_ctp; + + ACTIVATE_CTP(dbc_ctp, dbccl_id, CT_CURSOR); + dbc = (DBC *)dbc_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + +/* BEGIN __dbc_put_1_proc */ +void +__dbc_put_1_proc(dbccl_id, keydlen, keydoff, + keyflags, keydata, keysize, datadlen, + datadoff, dataflags, datadata, datasize, + flags, replyp, freep) + long dbccl_id; + u_int32_t keydlen; + u_int32_t keydoff; + u_int32_t keyflags; + void *keydata; + u_int32_t keysize; + u_int32_t datadlen; + u_int32_t datadoff; + u_int32_t dataflags; + void *datadata; + u_int32_t datasize; + u_int32_t flags; + __dbc_put_reply *replyp; + int * freep; +/* END __dbc_put_1_proc */ +{ + int ret; + DBC * dbc; + ct_entry *dbc_ctp; + + ACTIVATE_CTP(dbc_ctp, dbccl_id, CT_CURSOR); + dbc = (DBC *)dbc_ctp->ct_anyp; + + /* + * XXX Code goes here + */ + + replyp->status = ret; + return; +} + diff --git a/bdb/dist/template/gen_client_ret b/bdb/dist/template/gen_client_ret new file mode 100644 index 00000000000..81e14d8b27a --- /dev/null +++ b/bdb/dist/template/gen_client_ret @@ -0,0 +1,522 @@ +/* Do not edit: automatically built by gen_rpc.awk. */ +#include "db_config.h" + +#ifdef HAVE_RPC +#ifndef NO_SYSTEM_INCLUDES +#include <sys/types.h> +#include <rpc/rpc.h> + +#include <errno.h> +#include <string.h> +#endif +#include "db_server.h" + +#include "db_int.h" +#include "db_page.h" +#include "db_ext.h" +#include "txn.h" + +#include "gen_client_ext.h" + +int +__dbcl_env_close_ret(dbenv, flags, replyp) + DB_ENV * dbenv; + u_int32_t flags; + __env_close_reply *replyp; +{ + int ret; + + if (replyp->status != 0) + return (replyp->status); + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_env_open_ret(dbenv, home, flags, mode, replyp) + DB_ENV * dbenv; + const char * home; + u_int32_t flags; + int mode; + __env_open_reply *replyp; +{ + int ret; + + if (replyp->status != 0) + return (replyp->status); + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_env_remove_ret(dbenv, home, flags, replyp) + DB_ENV * dbenv; + const char * home; + u_int32_t flags; + __env_remove_reply *replyp; +{ + int ret; + + if (replyp->status != 0) + return (replyp->status); + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_txn_abort_ret(txnp, replyp) + DB_TXN * txnp; + __txn_abort_reply *replyp; +{ + int ret; + + if (replyp->status != 0) + return (replyp->status); + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_txn_begin_ret(envp, parent, txnpp, flags, replyp) + DB_ENV * envp; + DB_TXN * parent; + DB_TXN ** txnpp; + u_int32_t flags; + __txn_begin_reply *replyp; +{ + int ret; + long txnid; + + if (replyp->status != 0) + return (replyp->status); + txnid = replyp->txnidcl_id; + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_txn_commit_ret(txnp, flags, replyp) + DB_TXN * txnp; + u_int32_t flags; + __txn_commit_reply *replyp; +{ + int ret; + + if (replyp->status != 0) + return (replyp->status); + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_db_close_ret(dbp, flags, replyp) + DB * dbp; + u_int32_t flags; + __db_close_reply *replyp; +{ + int ret; + + if (replyp->status != 0) + return (replyp->status); + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_db_get_ret(dbp, txnp, key, data, flags, replyp) + DB * dbp; + DB_TXN * txnp; + DBT * key; + DBT * data; + u_int32_t flags; + __db_get_reply *replyp; +{ + int ret; + /* DBT key; */ + /* DBT data; */ + + if (replyp->status != 0) + return (replyp->status); + /* Handle replyp->keydata; */ + /* Handle replyp->datadata; */ + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_db_key_range_ret(dbp, txnp, key, range, flags, replyp) + DB * dbp; + DB_TXN * txnp; + DBT * key; + DB_KEY_RANGE * range; + u_int32_t flags; + __db_key_range_reply *replyp; +{ + int ret; + double less; + double equal; + double greater; + + if (replyp->status != 0) + return (replyp->status); + less = replyp->less; + equal = replyp->equal; + greater = replyp->greater; + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_db_open_ret(dbp, name, subdb, type, flags, mode, replyp) + DB * dbp; + const char * name; + const char * subdb; + DBTYPE type; + u_int32_t flags; + int mode; + __db_open_reply *replyp; +{ + int ret; + DBTYPE type; + u_int32_t dbflags; + + if (replyp->status != 0) + return (replyp->status); + type = replyp->type; + dbflags = replyp->dbflags; + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_db_put_ret(dbp, txnp, key, data, flags, replyp) + DB * dbp; + DB_TXN * txnp; + DBT * key; + DBT * data; + u_int32_t flags; + __db_put_reply *replyp; +{ + int ret; + /* DBT key; */ + + if (replyp->status != 0) + return (replyp->status); + /* Handle replyp->keydata; */ + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_db_remove_ret(dbp, name, subdb, flags, replyp) + DB * dbp; + const char * name; + const char * subdb; + u_int32_t flags; + __db_remove_reply *replyp; +{ + int ret; + + if (replyp->status != 0) + return (replyp->status); + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_db_rename_ret(dbp, name, subdb, newname, flags, replyp) + DB * dbp; + const char * name; + const char * subdb; + const char * newname; + u_int32_t flags; + __db_rename_reply *replyp; +{ + int ret; + + if (replyp->status != 0) + return (replyp->status); + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int __db_db_stat_statsreplist __P((__db_stat_statsreplist, u_int32_t **)); +void __db_db_stat_statsfree __P((u_int32_t *)); + +int +__dbcl_db_stat_ret(dbp, sp, func0, flags, replyp) + DB * dbp; + void * sp; + void *(*func0) __P((size_t)); + u_int32_t flags; + __db_stat_reply *replyp; +{ + int ret; + u_int32_t *__db_statslist; + + if (replyp->status != 0) + return (replyp->status); + + if ((ret = __db_db_stat_statslist(replyp->statslist, &__db_statslist)) != 0) + return (ret); + + /* + * XXX Handle list + */ + + __db_db_stat_statsfree(__db_statslist); + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__db_db_stat_statsreplist(locp, ppp) + __db_stat_statsreplist *locp; + u_int32_t **ppp; +{ + u_int32_t *pp; + int cnt, ret, size; + __db_stat_statsreplist *nl; + + for (cnt = 0, nl = locp; nl != NULL; cnt++, nl = nl->next) + ; + + if (cnt == 0) { + *ppp = NULL; + return (0); + } + size = sizeof(*pp) * cnt; + if ((ret = __os_malloc(NULL, size, NULL, ppp)) != 0) + return (ret); + memset(*ppp, 0, size); + for (pp = *ppp, nl = locp; nl != NULL; nl = nl->next, pp++) { + *pp = *(u_int32_t *)nl->ent.ent_val; + } + return (0); +out: + __db_db_stat_statsfree(*ppp); + return (ret); +} + +void +__db_db_stat_statsfree(pp) + u_int32_t *pp; +{ + size_t size; + u_int32_t *p; + + if (pp == NULL) + return; + size = sizeof(*p); + for (p = pp; *p != 0; p++) { + size += sizeof(*p); + } + __os_free(pp, size); +} + +int +__dbcl_db_cursor_ret(dbp, txnp, dbcpp, flags, replyp) + DB * dbp; + DB_TXN * txnp; + DBC ** dbcpp; + u_int32_t flags; + __db_cursor_reply *replyp; +{ + int ret; + long dbcid; + + if (replyp->status != 0) + return (replyp->status); + dbcid = replyp->dbcidcl_id; + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_db_join_ret(dbp, curs, dbcp, flags, replyp) + DB * dbp; + DBC ** curs; + DBC ** dbcp; + u_int32_t flags; + __db_join_reply *replyp; +{ + int ret; + long dbcid; + + if (replyp->status != 0) + return (replyp->status); + dbcid = replyp->dbcidcl_id; + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_dbc_close_ret(dbc, replyp) + DBC * dbc; + __dbc_close_reply *replyp; +{ + int ret; + + if (replyp->status != 0) + return (replyp->status); + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_dbc_count_ret(dbc, countp, flags, replyp) + DBC * dbc; + db_recno_t * countp; + u_int32_t flags; + __dbc_count_reply *replyp; +{ + int ret; + db_recno_t dupcount; + + if (replyp->status != 0) + return (replyp->status); + dupcount = replyp->dupcount; + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_dbc_dup_ret(dbc, dbcp, flags, replyp) + DBC * dbc; + DBC ** dbcp; + u_int32_t flags; + __dbc_dup_reply *replyp; +{ + int ret; + long dbcid; + + if (replyp->status != 0) + return (replyp->status); + dbcid = replyp->dbcidcl_id; + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_dbc_get_ret(dbc, key, data, flags, replyp) + DBC * dbc; + DBT * key; + DBT * data; + u_int32_t flags; + __dbc_get_reply *replyp; +{ + int ret; + /* DBT key; */ + /* DBT data; */ + + if (replyp->status != 0) + return (replyp->status); + /* Handle replyp->keydata; */ + /* Handle replyp->datadata; */ + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +int +__dbcl_dbc_put_ret(dbc, key, data, flags, replyp) + DBC * dbc; + DBT * key; + DBT * data; + u_int32_t flags; + __dbc_put_reply *replyp; +{ + int ret; + /* DBT key; */ + + if (replyp->status != 0) + return (replyp->status); + /* Handle replyp->keydata; */ + + /* + * XXX Code goes here + */ + + return (replyp->status); +} + +#endif /* HAVE_RPC */ diff --git a/bdb/dist/template/rec_btree b/bdb/dist/template/rec_btree new file mode 100644 index 00000000000..6c954db1afb --- /dev/null +++ b/bdb/dist/template/rec_btree @@ -0,0 +1,943 @@ +#include "db_config.h" + +#ifndef NO_SYSTEM_INCLUDES +#include <sys/types.h> + +#include <string.h> +#endif + +#include "db_int.h" +#include "db_page.h" +#include "bam.h" +#include "log.h" + +/* + * __bam_pg_alloc_recover -- + * Recovery function for pg_alloc. + * + * PUBLIC: int __bam_pg_alloc_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__bam_pg_alloc_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __bam_pg_alloc_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__bam_pg_alloc_print); + REC_INTRO(__bam_pg_alloc_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __bam_pg_alloc1_recover -- + * Recovery function for pg_alloc1. + * + * PUBLIC: int __bam_pg_alloc1_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__bam_pg_alloc1_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __bam_pg_alloc1_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__bam_pg_alloc1_print); + REC_INTRO(__bam_pg_alloc1_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __bam_pg_free_recover -- + * Recovery function for pg_free. + * + * PUBLIC: int __bam_pg_free_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__bam_pg_free_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __bam_pg_free_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__bam_pg_free_print); + REC_INTRO(__bam_pg_free_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __bam_pg_free1_recover -- + * Recovery function for pg_free1. + * + * PUBLIC: int __bam_pg_free1_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__bam_pg_free1_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __bam_pg_free1_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__bam_pg_free1_print); + REC_INTRO(__bam_pg_free1_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __bam_split1_recover -- + * Recovery function for split1. + * + * PUBLIC: int __bam_split1_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__bam_split1_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __bam_split1_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__bam_split1_print); + REC_INTRO(__bam_split1_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __bam_split_recover -- + * Recovery function for split. + * + * PUBLIC: int __bam_split_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__bam_split_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __bam_split_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__bam_split_print); + REC_INTRO(__bam_split_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __bam_rsplit1_recover -- + * Recovery function for rsplit1. + * + * PUBLIC: int __bam_rsplit1_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__bam_rsplit1_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __bam_rsplit1_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__bam_rsplit1_print); + REC_INTRO(__bam_rsplit1_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __bam_rsplit_recover -- + * Recovery function for rsplit. + * + * PUBLIC: int __bam_rsplit_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__bam_rsplit_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __bam_rsplit_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__bam_rsplit_print); + REC_INTRO(__bam_rsplit_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __bam_adj_recover -- + * Recovery function for adj. + * + * PUBLIC: int __bam_adj_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__bam_adj_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __bam_adj_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__bam_adj_print); + REC_INTRO(__bam_adj_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __bam_cadjust_recover -- + * Recovery function for cadjust. + * + * PUBLIC: int __bam_cadjust_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__bam_cadjust_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __bam_cadjust_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__bam_cadjust_print); + REC_INTRO(__bam_cadjust_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __bam_cdel_recover -- + * Recovery function for cdel. + * + * PUBLIC: int __bam_cdel_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__bam_cdel_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __bam_cdel_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__bam_cdel_print); + REC_INTRO(__bam_cdel_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __bam_repl_recover -- + * Recovery function for repl. + * + * PUBLIC: int __bam_repl_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__bam_repl_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __bam_repl_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__bam_repl_print); + REC_INTRO(__bam_repl_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __bam_root_recover -- + * Recovery function for root. + * + * PUBLIC: int __bam_root_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__bam_root_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __bam_root_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__bam_root_print); + REC_INTRO(__bam_root_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __bam_curadj_recover -- + * Recovery function for curadj. + * + * PUBLIC: int __bam_curadj_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__bam_curadj_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __bam_curadj_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__bam_curadj_print); + REC_INTRO(__bam_curadj_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __bam_rcuradj_recover -- + * Recovery function for rcuradj. + * + * PUBLIC: int __bam_rcuradj_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__bam_rcuradj_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __bam_rcuradj_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__bam_rcuradj_print); + REC_INTRO(__bam_rcuradj_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + diff --git a/bdb/dist/template/rec_crdel b/bdb/dist/template/rec_crdel new file mode 100644 index 00000000000..352e9ae5f22 --- /dev/null +++ b/bdb/dist/template/rec_crdel @@ -0,0 +1,385 @@ +#include "db_config.h" + +#ifndef NO_SYSTEM_INCLUDES +#include <sys/types.h> + +#include <string.h> +#endif + +#include "db_int.h" +#include "db_page.h" +#include "crdel.h" +#include "log.h" + +/* + * __crdel_fileopen_recover -- + * Recovery function for fileopen. + * + * PUBLIC: int __crdel_fileopen_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__crdel_fileopen_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __crdel_fileopen_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__crdel_fileopen_print); + REC_INTRO(__crdel_fileopen_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __crdel_metasub_recover -- + * Recovery function for metasub. + * + * PUBLIC: int __crdel_metasub_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__crdel_metasub_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __crdel_metasub_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__crdel_metasub_print); + REC_INTRO(__crdel_metasub_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __crdel_metapage_recover -- + * Recovery function for metapage. + * + * PUBLIC: int __crdel_metapage_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__crdel_metapage_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __crdel_metapage_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__crdel_metapage_print); + REC_INTRO(__crdel_metapage_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __crdel_old_delete_recover -- + * Recovery function for old_delete. + * + * PUBLIC: int __crdel_old_delete_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__crdel_old_delete_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __crdel_old_delete_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__crdel_old_delete_print); + REC_INTRO(__crdel_old_delete_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __crdel_rename_recover -- + * Recovery function for rename. + * + * PUBLIC: int __crdel_rename_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__crdel_rename_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __crdel_rename_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__crdel_rename_print); + REC_INTRO(__crdel_rename_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __crdel_delete_recover -- + * Recovery function for delete. + * + * PUBLIC: int __crdel_delete_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__crdel_delete_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __crdel_delete_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__crdel_delete_print); + REC_INTRO(__crdel_delete_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + diff --git a/bdb/dist/template/rec_db b/bdb/dist/template/rec_db new file mode 100644 index 00000000000..69d941351c5 --- /dev/null +++ b/bdb/dist/template/rec_db @@ -0,0 +1,509 @@ +#include "db_config.h" + +#ifndef NO_SYSTEM_INCLUDES +#include <sys/types.h> + +#include <string.h> +#endif + +#include "db_int.h" +#include "db_page.h" +#include "db.h" +#include "log.h" + +/* + * __db_addrem_recover -- + * Recovery function for addrem. + * + * PUBLIC: int __db_addrem_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__db_addrem_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __db_addrem_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__db_addrem_print); + REC_INTRO(__db_addrem_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __db_split_recover -- + * Recovery function for split. + * + * PUBLIC: int __db_split_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__db_split_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __db_split_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__db_split_print); + REC_INTRO(__db_split_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __db_big_recover -- + * Recovery function for big. + * + * PUBLIC: int __db_big_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__db_big_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __db_big_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__db_big_print); + REC_INTRO(__db_big_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __db_ovref_recover -- + * Recovery function for ovref. + * + * PUBLIC: int __db_ovref_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__db_ovref_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __db_ovref_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__db_ovref_print); + REC_INTRO(__db_ovref_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __db_relink_recover -- + * Recovery function for relink. + * + * PUBLIC: int __db_relink_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__db_relink_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __db_relink_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__db_relink_print); + REC_INTRO(__db_relink_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __db_addpage_recover -- + * Recovery function for addpage. + * + * PUBLIC: int __db_addpage_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__db_addpage_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __db_addpage_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__db_addpage_print); + REC_INTRO(__db_addpage_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __db_debug_recover -- + * Recovery function for debug. + * + * PUBLIC: int __db_debug_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__db_debug_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __db_debug_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__db_debug_print); + REC_INTRO(__db_debug_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __db_noop_recover -- + * Recovery function for noop. + * + * PUBLIC: int __db_noop_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__db_noop_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __db_noop_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__db_noop_print); + REC_INTRO(__db_noop_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + diff --git a/bdb/dist/template/rec_hash b/bdb/dist/template/rec_hash new file mode 100644 index 00000000000..bcee2131cdc --- /dev/null +++ b/bdb/dist/template/rec_hash @@ -0,0 +1,881 @@ +#include "db_config.h" + +#ifndef NO_SYSTEM_INCLUDES +#include <sys/types.h> + +#include <string.h> +#endif + +#include "db_int.h" +#include "db_page.h" +#include "ham.h" +#include "log.h" + +/* + * __ham_insdel_recover -- + * Recovery function for insdel. + * + * PUBLIC: int __ham_insdel_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__ham_insdel_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __ham_insdel_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__ham_insdel_print); + REC_INTRO(__ham_insdel_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __ham_newpage_recover -- + * Recovery function for newpage. + * + * PUBLIC: int __ham_newpage_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__ham_newpage_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __ham_newpage_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__ham_newpage_print); + REC_INTRO(__ham_newpage_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __ham_splitmeta_recover -- + * Recovery function for splitmeta. + * + * PUBLIC: int __ham_splitmeta_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__ham_splitmeta_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __ham_splitmeta_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__ham_splitmeta_print); + REC_INTRO(__ham_splitmeta_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __ham_splitdata_recover -- + * Recovery function for splitdata. + * + * PUBLIC: int __ham_splitdata_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__ham_splitdata_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __ham_splitdata_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__ham_splitdata_print); + REC_INTRO(__ham_splitdata_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __ham_replace_recover -- + * Recovery function for replace. + * + * PUBLIC: int __ham_replace_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__ham_replace_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __ham_replace_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__ham_replace_print); + REC_INTRO(__ham_replace_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __ham_newpgno_recover -- + * Recovery function for newpgno. + * + * PUBLIC: int __ham_newpgno_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__ham_newpgno_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __ham_newpgno_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__ham_newpgno_print); + REC_INTRO(__ham_newpgno_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __ham_ovfl_recover -- + * Recovery function for ovfl. + * + * PUBLIC: int __ham_ovfl_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__ham_ovfl_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __ham_ovfl_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__ham_ovfl_print); + REC_INTRO(__ham_ovfl_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __ham_copypage_recover -- + * Recovery function for copypage. + * + * PUBLIC: int __ham_copypage_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__ham_copypage_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __ham_copypage_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__ham_copypage_print); + REC_INTRO(__ham_copypage_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __ham_metagroup_recover -- + * Recovery function for metagroup. + * + * PUBLIC: int __ham_metagroup_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__ham_metagroup_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __ham_metagroup_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__ham_metagroup_print); + REC_INTRO(__ham_metagroup_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __ham_groupalloc1_recover -- + * Recovery function for groupalloc1. + * + * PUBLIC: int __ham_groupalloc1_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__ham_groupalloc1_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __ham_groupalloc1_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__ham_groupalloc1_print); + REC_INTRO(__ham_groupalloc1_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __ham_groupalloc2_recover -- + * Recovery function for groupalloc2. + * + * PUBLIC: int __ham_groupalloc2_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__ham_groupalloc2_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __ham_groupalloc2_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__ham_groupalloc2_print); + REC_INTRO(__ham_groupalloc2_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __ham_groupalloc_recover -- + * Recovery function for groupalloc. + * + * PUBLIC: int __ham_groupalloc_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__ham_groupalloc_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __ham_groupalloc_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__ham_groupalloc_print); + REC_INTRO(__ham_groupalloc_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __ham_curadj_recover -- + * Recovery function for curadj. + * + * PUBLIC: int __ham_curadj_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__ham_curadj_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __ham_curadj_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__ham_curadj_print); + REC_INTRO(__ham_curadj_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __ham_chgpg_recover -- + * Recovery function for chgpg. + * + * PUBLIC: int __ham_chgpg_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__ham_chgpg_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __ham_chgpg_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__ham_chgpg_print); + REC_INTRO(__ham_chgpg_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + diff --git a/bdb/dist/template/rec_log b/bdb/dist/template/rec_log new file mode 100644 index 00000000000..1ce40b37804 --- /dev/null +++ b/bdb/dist/template/rec_log @@ -0,0 +1,137 @@ +#include "db_config.h" + +#ifndef NO_SYSTEM_INCLUDES +#include <sys/types.h> + +#include <string.h> +#endif + +#include "db_int.h" +#include "db_page.h" +#include "log.h" +#include "log.h" + +/* + * __log_register1_recover -- + * Recovery function for register1. + * + * PUBLIC: int __log_register1_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__log_register1_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __log_register1_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__log_register1_print); + REC_INTRO(__log_register1_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __log_register_recover -- + * Recovery function for register. + * + * PUBLIC: int __log_register_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__log_register_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __log_register_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__log_register_print); + REC_INTRO(__log_register_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + diff --git a/bdb/dist/template/rec_qam b/bdb/dist/template/rec_qam new file mode 100644 index 00000000000..fcd24d6a28e --- /dev/null +++ b/bdb/dist/template/rec_qam @@ -0,0 +1,509 @@ +#include "db_config.h" + +#ifndef NO_SYSTEM_INCLUDES +#include <sys/types.h> + +#include <string.h> +#endif + +#include "db_int.h" +#include "db_page.h" +#include "qam.h" +#include "log.h" + +/* + * __qam_inc_recover -- + * Recovery function for inc. + * + * PUBLIC: int __qam_inc_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__qam_inc_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __qam_inc_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__qam_inc_print); + REC_INTRO(__qam_inc_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __qam_incfirst_recover -- + * Recovery function for incfirst. + * + * PUBLIC: int __qam_incfirst_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__qam_incfirst_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __qam_incfirst_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__qam_incfirst_print); + REC_INTRO(__qam_incfirst_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __qam_mvptr_recover -- + * Recovery function for mvptr. + * + * PUBLIC: int __qam_mvptr_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__qam_mvptr_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __qam_mvptr_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__qam_mvptr_print); + REC_INTRO(__qam_mvptr_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __qam_del_recover -- + * Recovery function for del. + * + * PUBLIC: int __qam_del_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__qam_del_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __qam_del_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__qam_del_print); + REC_INTRO(__qam_del_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __qam_add_recover -- + * Recovery function for add. + * + * PUBLIC: int __qam_add_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__qam_add_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __qam_add_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__qam_add_print); + REC_INTRO(__qam_add_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __qam_delete_recover -- + * Recovery function for delete. + * + * PUBLIC: int __qam_delete_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__qam_delete_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __qam_delete_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__qam_delete_print); + REC_INTRO(__qam_delete_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __qam_rename_recover -- + * Recovery function for rename. + * + * PUBLIC: int __qam_rename_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__qam_rename_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __qam_rename_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__qam_rename_print); + REC_INTRO(__qam_rename_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __qam_delext_recover -- + * Recovery function for delext. + * + * PUBLIC: int __qam_delext_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__qam_delext_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __qam_delext_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__qam_delext_print); + REC_INTRO(__qam_delext_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + diff --git a/bdb/dist/template/rec_txn b/bdb/dist/template/rec_txn new file mode 100644 index 00000000000..c66d604f578 --- /dev/null +++ b/bdb/dist/template/rec_txn @@ -0,0 +1,509 @@ +#include "db_config.h" + +#ifndef NO_SYSTEM_INCLUDES +#include <sys/types.h> + +#include <string.h> +#endif + +#include "db_int.h" +#include "db_page.h" +#include "txn.h" +#include "log.h" + +/* + * __txn_old_regop_recover -- + * Recovery function for old_regop. + * + * PUBLIC: int __txn_old_regop_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__txn_old_regop_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __txn_old_regop_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__txn_old_regop_print); + REC_INTRO(__txn_old_regop_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __txn_regop_recover -- + * Recovery function for regop. + * + * PUBLIC: int __txn_regop_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__txn_regop_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __txn_regop_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__txn_regop_print); + REC_INTRO(__txn_regop_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __txn_old_ckp_recover -- + * Recovery function for old_ckp. + * + * PUBLIC: int __txn_old_ckp_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__txn_old_ckp_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __txn_old_ckp_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__txn_old_ckp_print); + REC_INTRO(__txn_old_ckp_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __txn_ckp_recover -- + * Recovery function for ckp. + * + * PUBLIC: int __txn_ckp_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__txn_ckp_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __txn_ckp_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__txn_ckp_print); + REC_INTRO(__txn_ckp_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __txn_xa_regop_old_recover -- + * Recovery function for xa_regop_old. + * + * PUBLIC: int __txn_xa_regop_old_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__txn_xa_regop_old_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __txn_xa_regop_old_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__txn_xa_regop_old_print); + REC_INTRO(__txn_xa_regop_old_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __txn_xa_regop_recover -- + * Recovery function for xa_regop. + * + * PUBLIC: int __txn_xa_regop_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__txn_xa_regop_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __txn_xa_regop_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__txn_xa_regop_print); + REC_INTRO(__txn_xa_regop_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __txn_child_old_recover -- + * Recovery function for child_old. + * + * PUBLIC: int __txn_child_old_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__txn_child_old_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __txn_child_old_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__txn_child_old_print); + REC_INTRO(__txn_child_old_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + +/* + * __txn_child_recover -- + * Recovery function for child. + * + * PUBLIC: int __txn_child_recover + * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); + */ +int +__txn_child_recover(dbenv, dbtp, lsnp, op, info) + DB_ENV *dbenv; + DBT *dbtp; + DB_LSN *lsnp; + db_recops op; + void *info; +{ + __txn_child_args *argp; + DB *file_dbp; + DBC *dbc; + DB_MPOOLFILE *mpf; + PAGE *pagep; + int cmp_n, cmp_p, modified, ret; + + REC_PRINT(__txn_child_print); + REC_INTRO(__txn_child_read); + + if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) + if (DB_REDO(op)) { + if ((ret = memp_fget(mpf, + &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) + goto out; + } else { + *lsnp = argp->prev_lsn; + ret = 0; + goto out; + } + + modified = 0; + cmp_n = log_compare(lsnp, &LSN(pagep)); + + /* + * Use this when there is something like "pagelsn" in the argp + * structure. Sometimes, you might need to compare meta-data + * lsn's instead. + * + * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); + */ + if (cmp_p == 0 && DB_REDO(op)) { + /* Need to redo update described. */ + modified = 1; + } else if (cmp_n == 0 && !DB_REDO(op)) { + /* Need to undo update described. */ + modified = 1; + } + if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) + goto out; + + *lsnp = argp->prev_lsn; + ret = 0; + +out: REC_CLOSE; +} + |