🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

2 total messages Started by Pierre Laplante Tue, 26 Sep 1989 15:26
For the NeXT
#634
Author: Pierre Laplante
Date: Tue, 26 Sep 1989 15:26
368 lines
14285 bytes
I have the following error when compiling on a NeXT running mach 0.9.

Script started on Tue Sep 26 11:30:13 1989
habitant> make
cc  -g -Bstatic -o bash shell.o y.tab.o general.o make_cmd.o print_cmd.o dispose_cmd.o execute_cmd.o variables.o builtins.o copy_cmd.o flags.o jobs.o subst.o glob.o hash.o mailcheck.o test.o trap.o alias.o alloc-files/malloc.o  braces.o unwind_prot.o  bas
hline.o version.o  readline/libreadline.a /usr/lib/libtermcap.a  
ld: multiple definitions of symbol _realloc
ld: multiple definitions of symbol _malloc
ld: multiple definitions of symbol _free
Undefined symbols:
 lmodt
 lmult
 ldivt

*** Exit 1
Stop.

Here is the Makefile


habitant> cat Makfiler
Makfiler: No such file or directory
habitant> cat Makefile
## -*- text -*- ####################################################
#                                                                  #
# Makefile for bash, the Bourne Again SHell.                       #
#                                                                  #
# Do:                                                              #
#       make            To make `bash' in current directory        #
#       make install    To make bash and install it in DESTDIR     #
#       make newversion To update the version of the shell         #
#       make distribution  If you are a wizard                     #
#       make bash.tar.Z If you are a normal person                 #
#       make clone      To make a clone of the bash distribution.  #
#                                                                  #
# The file `config.h' contains some defines for controlling        #
#  various features.                                               #
#                                                                  #
#                                                                  #
####################################################################

# Here is a rule for making .o files from .c files that doesn't force
# the type of the machine (like -sun3) into the flags.
.c.o:
        $(CC) -c $(CFLAGS) $(CPPFLAGS) $*.c

# Of course, you cannot do this the first time through...
#SHELL=/usr/gnu/bin/bash
SHELL=/bin/sh

# FLAGS THAT REFER TO THE DESTINATION SYSTEM
####################################################################
#
#  The variables in this box can (and should) be changed to match the
#  system that you are compiling the shell on.
#
# The mailing address of you, the local maintainer.  This *must* be
# enclosed in double quotes.  Until I make a better Makefile.
MAINTAINER = '"bfox@ai.mit.edu"'

# Destination installation directory.  The shell is copied here if
# you do a `make install'.  The directory name does NOT end in a slash.
DESTDIR = /usr/local/bin

# The name of the target hardware.  It makes a difference.  If your
# machine doesn't seem to be represented by one of the machines here,
# try one and see how well you do.
# Use i386 for PC type 386 boxes. (Compaq, etc.)
# SUN3, SUN4, SUN386i, VAX, SONY, CONVEX, HP, HP9KS300, i386, NeXT, AIX,
# ATT3B, ATT386
TARGET = NeXT

# The name of the target operating system.  There isn't such a big
# difference between SUNOS3 and Bsd.  But there might be in the future.
# SUNOS3, SUNOS4, SYSV, Bsd, HPUX, UNIXPC
OS = BSD

# You only need this if you are hacking the shell in a location
# that doesn't do enough backups, or does a poor job.  In that
# case, BACKUP_DIR should be the name of a directory on another
# device (i.e. different than the one you are building the shell
# on), and you should do `make backup' at least once a day.
BACKUP_DIR = /home/gogol/bash

#
####################################################################

# FLAGS THAT REFER TO THE COMPILATION PROCESS
####################################################################
#
# PROFILE_FLAGS is either -pg, to generate profiling info for use
# with gprof, or nothing (the default).
PROFILE_FLAGS=

# HP-UX compilation requires the BSD library.
#LOCAL_LIBS = -lBSD

# Xenix requires -lx -ldir.  It is also required in the readline Makefile.
#LOCAL_LIBS = -lx -ldir

GCC_SUNOS4_FLAG = -Bstatic
DEBUG_FLAGS = $(PROFILE_FLAGS) -g $(GCC_SUNOS4_FLAG)
LDFLAGS = $(DEBUG_FLAGS)
CFLAGS  = $(DEBUG_FLAGS) -D${TARGET} -DTARGET=${TARGET} -D${OS}
CPPFLAGS= -I$(LIBSRC)

# If you don't have Bison use "yacc".  Otherwise use "bison -y".
BISON = bison -y

# If you don't have Gcc use cc.
CC = cc

####################################################################

# These are required for sending bug reports.
SYSTEM_NAME = '"$(TARGET)"'
OS_NAME = '"$(OS)"'

# The name of this program.
PROGRAM = bash

# The default primary and secondary prompts.
PPROMPT = '"${PROGRAM}\\$$ "'
SPROMPT = '"${PROGRAM}>"'

# The group of configuration flags.  These are for shell.c
CFG_FLAGS = -DMAINTAINER=$(MAINTAINER) -DPPROMPT=$(PPROMPT)\
            -DSPROMPT=$(SPROMPT) -DOS_NAME=$(OS_NAME)\
            -DSYSTEM_NAME=$(SYSTEM_NAME)

# The directory which contains the source for malloc.  The name must
# end in a slash, as in `./alloc-files/'
ALLOC_SOURCE = ./alloc-files/

# Our malloc.
MALLOC = $(ALLOC_SOURCE)malloc.o
MALLOC_FLAGS = -Drcheck -Dbotch=programming_error
#MALLOC= $(ALLOC_SOURCE)malloc.o
#ALLOCA= $(ALLOC_SOURCE)alloca.o

ALLOC_HEADERS = $(ALLOC_SOURCE)getpagesize.h
ALLOC_FILES = $(ALLOC_SOURCE)malloc.c $(ALLOC_SOURCE)alloca.c\
              $(ALLOC_SOURCE)i386-alloca.s

# Anticipated library for alloca if you do not use an alloc from this package.
# E.g. "-lPW" for AT&T 3B's.  The AT&T 6386 systems can use i386-alloca.o.
# If you are using gcc, then leave ALLOCA_LIB undefined, as __builtin_alloca
# will do the trick.
#ALLOCA_LIB = -lPW
ALLOCA_LIB =

# If your system doesn't have a sys_siglist, then define SIGLIST
# as siglist.o
#SIGLIST = siglist.o

RM = rm
AR = ar
RANLIB = ranlib

# Support libraries required.  Termcap and Readline.
# We would like to use GNU's termcap library.  Where is it?
# If you don't have -ltermcap, you might try -lcurses.
TERMCAP = /usr/lib/libtermcap.a
READLINE= ./readline/libreadline.a

# The source code for the support libraries.
LIBSRC = ./
HISTORY_SOURCE  = $(LIBSRC)readline/history.c $(LIBSRC)readline/history.h
RLIBSRC = $(LIBSRC)readline/
READLINE_SOURCE = $(RLIBSRC)readline.c $(RLIBSRC)readline.h\
                  $(RLIBSRC)chardefs.h $(RLIBSRC)keymaps.h\
                  $(RLIBSRC)funmap.c $(RLIBSRC)emacs_keymap.c\
                  $(RLIBSRC)vi_keymap.c $(RLIBSRC)keymaps.c\
                  $(HISTORY_SOURCE)
TERMCAP_SOURCE  =

READLINE_DOC    = $(RLIBSRC)readline.texinfo\
                  $(RLIBSRC)inc-readline.texinfo
HISTORY_DOC     = $(RLIBSRC)history.texinfo\
                  $(RLIBSRC)inc-history.texinfo
TERMCAP_DOC     =

LIBRARY_SOURCE  = $(READLINE_SOURCE) $(TERMCAP_SOURCE)
LIBRARY_DOC     = $(READLINE_DOC) $(HISTORY_DOC) $(TERMCAP_DOC)
LIBRARY_SUPPORT = $(RLIBSRC)Makefile $(RLIBSRC)ChangeLog
LIBRARY_TAR     = $(LIBRARY_SOURCE) $(LIBRARY_DOC) $(LIBRARY_SUPPORT)

# The order is important.  Most dependent first.
LIBRARIES = $(READLINE) $(TERMCAP)

CSOURCES = shell.c parse.y general.c make_cmd.c print_cmd.c\
           dispose_cmd.c execute_cmd.c variables.c builtins.c\
           copy_cmd.c flags.c subst.c glob.c hash.c mailcheck.c\
           test.c trap.c jobs.c nojobs.c $(ALLOC_FILES) braces.c\
           unwind_prot.c siglist.c bashline.c version.c

HSOURCES = shell.h flags.h trap.h hash.h jobs.h builtins.h alias.c \
           alias.h general.h variables.h config.h $(ALLOC_HEADERS) \
           version.h quit.h

SOURCES  = $(CSOURCES) $(HSOURCES)

OBJECTS  = shell.o y.tab.o general.o make_cmd.o print_cmd.o\
           dispose_cmd.o execute_cmd.o variables.o builtins.o copy_cmd.o\
           flags.o jobs.o subst.o glob.o hash.o mailcheck.o test.o\
           trap.o alias.o $(MALLOC) $(ALLOCA) braces.o unwind_prot.o\
           $(SIGLIST) bashline.o version.o

# Documentation for the shell.
DOCDIR = ./documentation/
BASHDOCS = $(DOCDIR)*.texinfo $(DOCDIR)texinfo.tex
DOCUMENTATION = README FEATURES $(BASHDOCS) $(LIBRARY_DOCS)

# Some example files
EXAMPLES = examples/*

SUPPORT = COPYING Makefile newversion.c make-tarfile mail-shell inform \
          $(DOCUMENTATION) ChangeLog .distribution $(EXAMPLES)

MAIL = shell-mail

# BAGGAGE consists of things that you want to keep with the shell for some
# reason, but don't actually use; old source code, etc.
BAGGAGE = longest_signal_desc.c

THINGS_TO_TAR = $(SOURCES) $(LIBRARY_TAR) $(SUPPORT) $(BAGGAGE)

$(PROGRAM):     .build $(OBJECTS) $(LIBRARIES) Makefile
        $(CC) $(LDFLAGS) -o $(PROGRAM) $(OBJECTS) \
                $(LIBRARIES) $(LOCAL_LIBS) $(ALLOCA_LIB)
        $(RM) .make

.build:         newversion.aux  .make $(SOURCES)
        if newversion.aux -build; then mv -f newversion.h version.h; fi

.make:
        touch .make

version.h:      newversion.aux
        if newversion.aux -build; then mv -f newversion.h version.h; fi

shell.h:        general.h variables.h config.h
                touch shell.h

y.tab.c:        parse.y shell.h
                -if test -f y.tab.h; then mv -f y.tab.h old-y.tab.h; fi
                $(BISON) -d parse.y
                -if cmp -s old-y.tab.h y.tab.h; then mv old-y.tab.h y.tab.h; fi

$(READLINE):    $(READLINE_SOURCE)
                (cd $(RLIBSRC); $(MAKE) $(MFLAGS) CC='$(CC)'\
                        CFLAGS='$(CFLAGS) -DSHELL')

$(TERMCAP):     $(TERMCAP_SOURCE)
                (cd $(LIBSRC); $(MAKE) $(MFLAGS) CC='$(CC)'\
                        CFLAGS='$(CFLAGS) -I.')

shell.o:        shell.h flags.h shell.c
                $(CC) $(CFG_FLAGS) $(CFLAGS) $(CPPFLAGS) -c shell.c

braces.o:       braces.c
                $(CC) $(CFLAGS) -DSHELL -c braces.c

keymaps.c:      emacs_keymap.c vi_keymap.c
                touch keymaps.c

$(MALLOC):      $(ALLOC_FILES)
                $(CC) -I$(ALLOC_SOURCE) $(CFLAGS) $(MALLOC_FLAGS) -c $*.c &&\
                mv `basename $*`.o $(MALLOC)

#$(ALLOCA):     $(ALLOC_FILES)
#               $(CC) -I$(ALLOC_SOURCE) $(CFLAGS) -o $(ALLOCA) -c $*.c

bashline.o:     bashline.c config.h $(RLIBSRC)readline.h
                $(CC) -I../ $(CFLAGS) $(CPPFLAGS) -c bashline.c

bashline.o:     variables.h builtins.h
jobs.o:         jobs.c nojobs.c jobs.h config.h
version.o:      version.h version.c .build
general.o:      general.c shell.h
y.tab.h:        y.tab.c
alias.o:        alias.h alias.c
subst.o:        subst.c shell.h
make_cmd.o:     shell.h config.h make_cmd.c
print_cmd.o:    shell.h y.tab.h print_cmd.c
execute_cmd.o:  shell.h y.tab.h builtins.h flags.h config.h execute_cmd.c
dispose_cmd.o:  shell.h dispose_cmd.c
copy_cmd.o:     shell.h copy_cmd.c
builtins.o:     shell.h flags.h trap.h builtins.h jobs.h config.h builtins.c
flags.o:        flags.h flags.c config.h
hash.o:         hash.h hash.c
trap.o:         shell.h trap.h config.h trap.c
variables.o:    variables.h flags.h

$(PROGRAM).tar: $(THINGS_TO_TAR) .distribution
        make-tarfile $(PROGRAM) `cat .distribution` $(THINGS_TO_TAR)

$(PROGRAM).tar.Z:       $(PROGRAM).tar
                compress -f $(PROGRAM).tar

clone:
        mkdir clone; \
        (cd clone; for i in $(THINGS_TO_TAR); \
          do file=`basename $$i`; \
           dir=`echo $$i | sed "s/$$file\$$//" | sed 's@\(.*\)/\$$@\1@'`; \
           if [ "$$dir" = "" ]; then dir="."; fi; \
           if [ "$$dir" != "." ]; then \
              if [ ! -d "$$dir" ]; then mkdir "$$dir"; fi; \
              if [ "$$file" = Makefile ]; \
                then cp ../$$i $$i; \
               else ln -s ../../$$i $$i; \
              fi; \
           else if [ "$$file" = Makefile ]; then cp ../$$i $$i; \
                 else ln -s ../$$i $$i; fi; \
           fi; \
          done)

# Make `backup' be a link to a directory on another device.
backup:         $(PROGRAM).tar.Z
                if [ ! -h backup ]; then ln -s $(BACKUP_DIR) backup; fi
                cp $(PROGRAM).tar.Z backup/$(PROGRAM).tar.Z

install:        $(PROGRAM)
                -mv $(DESTDIR)/$(PROGRAM) $(DESTDIR)/$(PROGRAM).old
                cp $(PROGRAM) $(DESTDIR)/$(PROGRAM)
                rm -f installed-$(PROGRAM)
                ln -s $(DESTDIR)/$(PROGRAM) installed-$(PROGRAM)

mailable:       distribution
                /bin/rm -rf uuencoded
                mkdir uuencoded
                $(SHELL) -c 'f=$(PROGRAM)-`cat .distribution`.tar.Z;uuencode $$f $$f | split -800 - uuencoded/$$f.uu.'

.distribution:  newversion.aux
                newversion.aux -dist `$(PROGRAM) -c 'echo $$BASH_VERSION'`

distribution:   $(PROGRAM).tar.Z .distribution
                cp $(PROGRAM).tar.Z $(PROGRAM)-`cat .distribution`.tar.Z

newversion.aux: newversion.c
                $(CC) -g -o newversion.aux newversion.c

newversion:     newversion.aux
                rm -f .build
                newversion.aux -dist
                mv -f newversion.h version.h
                make $(PROGRAM)

documentation:
                (cd $(DOCDIR); makeinfo *.texinfo)

tags:           $(SOURCES) $(LIBRARY_SOURCE)
                etags $(SOURCES) $(LIBRARY_SOURCE)
clean:
                rm -f $(OBJECTS) $(PROGRAM) y.tab.c y.tab.h newversion.aux
                (cd $(LIBSRC); rm *.o *.a)
dist-clean:
                rm -f $(OBJECTS) $(PROGRAM) y.tab.c newversion.aux
                rm -rf uuencoded
habitant> 

script done on Tue Sep 26 11:31:05 1989

-- 

Pierre Laplante	 				
Universite de Montreal, Dep. I.R.O. X-220, C.P. 6128, succursale A
Montreal (Quebec) H3C 3J7, (514) 343-6830, laplante@iro.umontreal.ca 
Re: For the NeXT
#635
Author: Jacob Gore
Date: Tue, 26 Sep 1989 16:54
30 lines
1643 bytes
/ gnu.bash.bug / laplante@iro.umontreal.ca (Pierre Laplante) / Sep 26, 1989 /
> I have the following error when compiling on a NeXT running mach 0.9.
> 
> Script started on Tue Sep 26 11:30:13 1989
> habitant> make
> cc  -g -Bstatic -o bash shell.o y.tab.o general.o make_cmd.o print_cmd.o
> dispose_cmd.o execute_cmd.o variables.o builtins.o copy_cmd.o flags.o
> jobs.o subst.o glob.o hash.o mailcheck.o test.o trap.o alias.o
> alloc-files/malloc.o  braces.o unwind_prot.o  bashline.o version.o
> readline/libreadline.a /usr/lib/libtermcap.a  
> ld: multiple definitions of symbol _realloc
> ld: multiple definitions of symbol _malloc
> ld: multiple definitions of symbol _free
> Undefined symbols:
>  lmodt
>  lmult
>  ldivt

NeXT's cc, by default, links with the shared library /lib/libsys_s.a, and
the loader does not allow symbols in .o files to overrule those in shared
libraries (in 0.9, anyway -- I don't know about 1.0 yet).  Using
/lib/libc.a instead should get rid of the "multiple definitions" problem.
I don't know about the undefined symbols.

I just use the version of malloc in the shared library (just set MALLOC and
MALLOC_FLAGS to nothing in the Makefile).

Jacob
--
Jacob Gore		Jacob@Gore.Com			boulder!gore!jacob
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads