This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

shared libraries in tcl/tk parts of insight


Okay, last bug report for a few days, I promise.  :-)  I take it that
--enable-shared isn't a common configuration for Insight?  (I tried naming
specific tools and libraries in the --enable-shared= argument, but that
doesn't work like I thought it did.)

While trying to build a unified gcc+gdb+binutils tree on i686-pc-linux-gnu:

    rm -f libitcl3.0.so
    gcc -shared -o libitcl3.0.so itcl_bicmds.o itcl_class.o itcl_cmds.o
     itcl_ensemble.o itcl_linkage.o itcl_methods.o itcl_migrate.o itcl_objects.o
     itcl_obsolete.o itcl_parse.o itcl_util.o
    ranlib libitcl3.0.so
    ranlib: libitcl3.0.so: File format not recognized
    gmake[2]: *** [libitcl3.0.so] Error 1
    gmake[2]: Leaving directory `/home/pme/build/build-2001-01-08/itcl/itcl/unix'
    gmake[1]: *** [all] Error 1
    gmake[1]: Leaving directory `/home/pme/build/build-2001-01-08/itcl'
    gmake: *** [all-itcl] Error 2

This occurs when --enable-shared was passed to the top-level configure.
The libraries are being built correctly, but the various Makefile's blindly
call ranlib on them after the build, and then they will try to do so again
during installation.

This happens in a number of tcl/tix/tk/itcl places.  Sometimes the Makefiles
have rules to correctly call ranlib or not during the build, but do it
again anyhow during the installation.  There are correct "RANLIB = :"
definitions created, but they are overridden by the top-level make.

This patch gets me through things corectly.  It isn't suitable for
application (it makes assumptions about filename endings), but at least
points out where the problems occur.

Also, there are issues with calling the newly-built tclsh during install.
With --enable-shared LD_LIBRARY_PATH must be used (or libtool!).
Also, TCL_BIN_DIR wasn't being replaced by configure, and would remain
@TCL_BIN_DIR@ in the Makefile.  I touch'ed, I autoconf'ed, I grep'ed;
it just would not be looked at by config.status.  Using any name other
than TCL_BIN_DIR worked fine.  I don't know why.


Phil
[not subscribed to this list]


Index: itcl/itcl/unix/Makefile.in
===================================================================
RCS file: /cvs/src/src/itcl/itcl/unix/Makefile.in,v
retrieving revision 1.1.1.1
diff -u -3 -r1.1.1.1 Makefile.in
--- Makefile.in	2000/02/07 00:19:46	1.1.1.1
+++ Makefile.in	2001/01/09 04:39:32
@@ -193,7 +193,7 @@
 @ITCL_LIB_FILE@:  $(OBJS)
 	rm -f $(ITCL_LIB_FILE)
 	@MAKE_LIB@
-	$(RANLIB) $(ITCL_LIB_FILE)
+	case $(ITCL_LIB_FILE) in *.a) $(RANLIB) $(ITCL_LIB_FILE) ;; esac
 
 itclsh: tclAppInit.o $(ITCL_LIB_FILE) @TCL_LIB_FULL_PATH@
 	$(CC) @LD_FLAGS@ tclAppInit.o @ITCL_BUILD_LIB_SPEC@ \
@@ -213,7 +213,7 @@
 	@$(MKINSTALLDIRS) $(LIB_INSTALL_DIR) $(BIN_INSTALL_DIR)
 	@echo "Installing $(ITCL_LIB_FILE)"
 	@$(INSTALL_DATA) $(ITCL_LIB_FILE) $(LIB_INSTALL_DIR)/$(ITCL_LIB_FILE)
-	@(cd $(LIB_INSTALL_DIR); $(RANLIB) $(ITCL_LIB_FILE))
+	@case $(ITCL_LIB_FILE) in *.a) (cd $(LIB_INSTALL_DIR); $(RANLIB) $(ITCL_LIB_FILE));; esac
 	chmod 555 $(LIB_INSTALL_DIR)/$(ITCL_LIB_FILE)
 	@echo "Installing itclsh"
 	$(INSTALL_PROGRAM) itclsh $(BIN_INSTALL_DIR)/itclsh$(VERSION)
Index: itcl/itk/unix/Makefile.in
===================================================================
RCS file: /cvs/src/src/itcl/itk/unix/Makefile.in,v
retrieving revision 1.1.1.1
diff -u -3 -r1.1.1.1 Makefile.in
--- Makefile.in	2000/02/07 00:19:46	1.1.1.1
+++ Makefile.in	2001/01/09 04:39:32
@@ -226,7 +226,7 @@
 @ITK_LIB_FILE@: ${OBJS}
 	rm -f $(ITK_LIB_FILE)
 	@MAKE_LIB@
-	$(RANLIB) $(ITK_LIB_FILE)
+	case $(ITK_LIB_FILE) in *.a) $(RANLIB) $(ITK_LIB_FILE) ;; esac
 
 itkwish: tkAppInit.o $(ITK_LIB_FILE) @TCL_LIB_FULL_PATH@ @TK_LIB_FULL_PATH@ \
 		@ITCL_LIB_FULL_PATH@
@@ -253,7 +253,7 @@
 	@$(MKINSTALLDIRS) $(LIB_INSTALL_DIR) $(BIN_INSTALL_DIR)
 	@echo "Installing $(ITK_LIB_FILE)"
 	@$(INSTALL_DATA) $(ITK_LIB_FILE) $(LIB_INSTALL_DIR)
-	@(cd $(LIB_INSTALL_DIR); $(RANLIB) $(ITK_LIB_FILE))
+	@case $(ITK_LIB_FILE) in *.a) (cd $(LIB_INSTALL_DIR); $(RANLIB) $(ITK_LIB_FILE));; esac
 	@chmod 555 $(LIB_INSTALL_DIR)/$(ITK_LIB_FILE)
 	@echo "Installing itkwish"
 	$(INSTALL_PROGRAM) itkwish $(BIN_INSTALL_DIR)/itkwish$(VERSION)
Index: tcl/unix/Makefile.in
===================================================================
RCS file: /cvs/src/src/tcl/unix/Makefile.in,v
retrieving revision 1.1.1.1
diff -u -3 -r1.1.1.1 Makefile.in
--- Makefile.in	1999/11/09 01:28:44	1.1.1.1
+++ Makefile.in	2001/01/09 04:39:38
@@ -449,7 +449,7 @@
 	    done;
 	@echo "Installing $(TCL_LIB_FILE)"
 	@$(INSTALL_DATA) $(TCL_LIB_FILE) $(LIB_INSTALL_DIR)/$(TCL_LIB_FILE)
-	@(cd $(LIB_INSTALL_DIR); $(RANLIB) $(TCL_LIB_FILE))
+	@case $(TCL_LIB_FILE) in *.a) (cd $(LIB_INSTALL_DIR); $(RANLIB) $(TCL_LIB_FILE));; esac
 	@chmod 555 $(LIB_INSTALL_DIR)/$(TCL_LIB_FILE)
 	@echo "Installing tclsh"
 	@$(INSTALL_PROGRAM) tclsh $(BIN_INSTALL_DIR)/tclsh
Index: tix/unix/tk8.0/Makefile.in
===================================================================
RCS file: /cvs/src/src/tix/unix/tk8.0/Makefile.in,v
retrieving revision 1.1.1.1
diff -u -3 -r1.1.1.1 Makefile.in
--- Makefile.in	2000/02/07 00:19:29	1.1.1.1
+++ Makefile.in	2001/01/09 04:39:39
@@ -67,7 +67,7 @@
 #
 TCL_SRC_DIR     = @TCL_SRC_DIR@
 TCL_GENERIC_DIR = $(TCL_SRC_DIR)/generic
-TCL_BIN_DIR	= @TCL_BIN_DIR@
+TCL_BIN_DIR = @TCLBINDIR_VARIABLE@
 
 # Location of the Tk 8.0 source directory.
 #
@@ -84,6 +84,7 @@
 
 RUN_TCLSH	= TCL_LIBRARY=$(TCL_SRC_DIR)/library \
 		  TK_LIBRARY=$(TK_SRC_DIR)/library \
+		  LD_LIBRARY_PATH=$(TCL_BIN_DIR):${LD_LIBRARY_PATH} \
 	          $(TCL_BIN_DIR)/tclsh
 
 
Index: tix/unix/tk8.0/configure.in
===================================================================
RCS file: /cvs/src/src/tix/unix/tk8.0/configure.in,v
retrieving revision 1.1.1.1
diff -u -3 -r1.1.1.1 configure.in
--- configure.in	2000/02/07 00:19:29	1.1.1.1
+++ configure.in	2001/01/09 04:39:40
@@ -144,7 +144,7 @@
 
 # CYGNUS LOCAL: This used to get TCL_BIN_DIR from TCL_SRC_DIR, which
 # only works when srcdir == objdir
-TCL_BIN_DIR=../../../tcl/unix
+TCLBINDIR_VARIABLE=../../../tcl/unix
 
 #--------------------------------------------------------------------
 #	See if there was a command-line option for where Tk is;  if
@@ -221,7 +221,7 @@
 #	Makefile.
 #--------------------------------------------------------------------
 
-file=$TCL_BIN_DIR/tclConfig.sh
+file=$TCLBINDIR_VARIABLE/tclConfig.sh
 . $file
 CC=$TCL_CC
 SHLIB_CFLAGS=$TCL_SHLIB_CFLAGS
@@ -387,7 +387,7 @@
 AC_SUBST(TCL_LIBS)
 AC_SUBST(TCL_VERSION)
 AC_SUBST(TCL_SRC_DIR)
-AC_SUBST(TCL_BIN_DIR)
+AC_SUBST(TCLBINDIR_VARIABLE)
 AC_SUBST(TCL_LIB_FULL_PATH)
 AC_SUBST(TK_BUILD_LIB_SPEC)
 AC_SUBST(TK_LIBS)
Index: tk/unix/Makefile.in
===================================================================
RCS file: /cvs/src/src/tk/unix/Makefile.in,v
retrieving revision 1.1.1.1
diff -u -3 -r1.1.1.1 Makefile.in
--- Makefile.in	2000/02/07 00:19:30	1.1.1.1
+++ Makefile.in	2001/01/09 04:39:41
@@ -386,7 +386,7 @@
 	    done;
 	@echo "Installing $(TK_LIB_FILE)"
 	@$(INSTALL_DATA) $(TK_LIB_FILE) $(LIB_INSTALL_DIR)/$(TK_LIB_FILE)
-	@(cd $(LIB_INSTALL_DIR); $(RANLIB) $(TK_LIB_FILE))
+	@case $(TK_LIB_FILE) in *.a) (cd $(LIB_INSTALL_DIR); $(RANLIB) $(TK_LIB_FILE));; esac
 	@chmod 555 $(LIB_INSTALL_DIR)/$(TK_LIB_FILE)
 	@echo "Installing wish"
 	@$(INSTALL_PROGRAM) wish $(BIN_INSTALL_DIR)/wish


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]