812 lines
27 KiB
C
812 lines
27 KiB
C
/* This -*- C -*- file (cpp-Makefile) is run through the C preprocessor
|
|
to produce bash-Makefile which is machine specific.
|
|
|
|
If you have Gcc and/or Bison, you might wish to mention that right
|
|
below here.
|
|
|
|
Since this is to become a Makefile, blank lines which appear outside
|
|
of comments may not contain a TAB character.
|
|
|
|
Copyright (C) 1987,1991 Free Software Foundation, Inc.
|
|
|
|
This file is part of GNU Bash, the Bourne Again SHell.
|
|
|
|
Bash 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 1, or (at your option) any later
|
|
version.
|
|
|
|
Bash 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 Bash; see the file COPYING. If not, write to the Free Software
|
|
Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|
|
|
/**/# This Makefile is automagically made from cpp-Makefile. You should
|
|
/**/# not be editing this file; edit cpp-Makefile, machines.h, or
|
|
/**/# support/mksysdefs instead. Then, assuming the edits were required
|
|
/**/# to compile Bash on your system, mail the changes you had to make to
|
|
/**/# bash-maintainers@ai.mit.edu. We will do our best to incorporate
|
|
/**/# them into the next release.
|
|
|
|
/* **************************************************************** */
|
|
/* */
|
|
/* Which compiler are you using? */
|
|
/* */
|
|
/* **************************************************************** */
|
|
|
|
/* Define HAVE_GCC if you have the GNU C compiler. */
|
|
/* #define HAVE_GCC */
|
|
|
|
/* Define HAVE_FIXED_INCLUDES if you are using GCC with the fixed
|
|
header files. */
|
|
#if defined (HAVE_GCC) && !defined (HAVE_FIXED_INCLUDES)
|
|
/* #define HAVE_FIXED_INCLUDES */
|
|
#endif /* HAVE_GCC && !HAVE_FIXED_INCLUDES */
|
|
|
|
/* Define HAVE_BISON if you have the GNU replacement for Yacc. */
|
|
/**/# We would like you to use Bison instead of Yacc since some
|
|
/**/# versions of Yacc cannot handle reentrant parsing. Unfortunately,
|
|
/**/# this includes the Yacc currently being shipped with SunOS4.x.
|
|
/**/# If you do use Yacc, please make sure that any bugs in parsing
|
|
/**/# are not really manifestations of Yacc bugs before you report
|
|
/**/# them.
|
|
#define HAVE_BISON
|
|
|
|
/**/# Can be overidden on invocation.
|
|
MAKE = make
|
|
DESTDIR = /usr/gnu/bin
|
|
|
|
/* This includes the appropriate description for the machine that you are
|
|
using (we hope). If the compilation doesn't work correctly, then you
|
|
will have to edit the file `machines.h' to include a description for the
|
|
machine that your Cpp uniquely identifies this as. For example, Sun 4's
|
|
are recognized by the Cpp identifier `sparc', Vax is recognized with `vax',
|
|
etc. The order of these files is very important. Config.h must come last,
|
|
since it is capable of undef'ing various things. */
|
|
#define BUILDING_MAKEFILE /* Tell config.h to avoid #including anything. */
|
|
#include "sysdefs.h"
|
|
#include "machines.h"
|
|
#include "config.h"
|
|
|
|
/**/# Here is a rule for making .o files from .c files that does not
|
|
/**/# force the type of the machine (like -M_MACHINE) into the flags.
|
|
.c.o:
|
|
$(RM) $@
|
|
$(CC) $(CFLAGS) $(CPPFLAGS) -c $*.c
|
|
|
|
#if defined (HAVE_BISON)
|
|
BISON = bison -y
|
|
#else
|
|
BISON = yacc
|
|
#endif
|
|
|
|
#if defined (HAVE_GCC)
|
|
# if defined (GCC_FLAGS)
|
|
GCC_EXTRAS = GCC_FLAGS
|
|
# endif /* GCC_FLAGS */
|
|
# if !defined (HAVE_FIXED_INCLUDES)
|
|
/* This is guaranteed to work, even if you have the fixed includes!
|
|
(Unless, of course, you have the fixed include files installed in
|
|
/usr/include. Then it will break.) */
|
|
# if defined (isc386)
|
|
CC = gcc -traditional -posix -I/usr/include $(GCC_EXTRAS)
|
|
# else
|
|
CC = gcc -traditional -I/usr/include $(GCC_EXTRAS)
|
|
# endif /* isc386 */
|
|
# else /* HAVE_FIXED_INCLUDES */
|
|
# if defined (isc386)
|
|
CC = gcc -posix $(GCC_EXTRAS)
|
|
# else /* !isc386 */
|
|
CC = gcc $(GCC_EXTRAS)
|
|
# endif /* isc386 */
|
|
# endif /* HAVE_FIXED_INCLUDES */
|
|
#else /* !HAVE_GCC */
|
|
CC = CPP_CC
|
|
#endif /* !HAVE_GCC */
|
|
|
|
/**/# Of course, you cannot do this the first time through...
|
|
/**/#SHELL=$(DESTDIR)/bash
|
|
SHELL=/bin/sh
|
|
|
|
RM = rm -f
|
|
AR = ar
|
|
|
|
MACHINE = M_MACHINE
|
|
OS = M_OS
|
|
|
|
/**/# PROFILE_FLAGS is either -pg, to generate profiling info for use
|
|
/**/# with gprof, or nothing (the default).
|
|
PROFILE_FLAGS=
|
|
|
|
#if defined (HAVE_SHARED_LIBS) && defined (sun)
|
|
# if !defined (HAVE_GCC)
|
|
/**/# On Sun systems, we compile without shared libraries so we
|
|
/**/# can debug the shell with gdb.
|
|
NOSHARE = -Bstatic
|
|
# endif
|
|
#endif
|
|
|
|
#if defined (SYSDEP_CFLAGS)
|
|
/**/# This system has some peculiar flags that must be passed to the
|
|
/**/# the C compiler (or to cpp).
|
|
SYSDEP = SYSDEP_CFLAGS
|
|
#endif /* SYSDEP_CFLAGS */
|
|
|
|
#if defined (SYSDEP_LDFLAGS)
|
|
/**/# This system has some peculiar flags that must be passed to the
|
|
/**/# link editor (ld).
|
|
SYSDEP_LD = SYSDEP_LDFLAGS
|
|
#endif /* SYSDEP_LDFLAGS */
|
|
|
|
#if defined (HAVE_SETLINEBUF)
|
|
/**/# This system has the setlinebuf () call.
|
|
LINEBUF = -DHAVE_SETLINEBUF
|
|
#endif
|
|
|
|
#if defined (HAVE_VFPRINTF)
|
|
/**/# This system has the vprintf () and vfprintf () calls.
|
|
VPRINTF = -DHAVE_VFPRINTF
|
|
#endif /* HAVE_VFPRINTF */
|
|
|
|
#if defined (HAVE_UNISTD_H)
|
|
/**/# This system has <unistd.h>.
|
|
UNISTD = -DHAVE_UNISTD_H
|
|
#endif
|
|
|
|
#if defined (HAVE_GETGROUPS)
|
|
/**/# This system has multiple groups.
|
|
GROUPS = -DHAVE_GETGROUPS
|
|
#endif
|
|
|
|
#if defined (HAVE_RESOURCE)
|
|
/**/# This system has <sys/resource.h>
|
|
RESOURCE = -DHAVE_RESOURCE
|
|
#endif
|
|
|
|
#if defined (VOID_SIGHANDLER)
|
|
/**/# This system's signal () call returns a pointer to a function returning
|
|
/**/# void. The signal handlers themselves are thus void functions.
|
|
SIGHANDLER = -DVOID_SIGHANDLER
|
|
#endif
|
|
|
|
#if defined (HAVE_STRERROR)
|
|
/**/# This system has the strerror () function.
|
|
STRERROR = -DHAVE_STRERROR
|
|
#endif
|
|
|
|
#if defined (HAVE_WAIT_H)
|
|
/**/# This system has <sys/wait.h>
|
|
WAITH = -DHAVE_WAIT_H
|
|
#endif
|
|
|
|
#if defined (HAVE_GETWD)
|
|
/**/# This system has the getwd () call.
|
|
GETWD = -DHAVE_GETWD
|
|
#endif
|
|
|
|
#if defined (HAVE_DUP2)
|
|
/**/# This system has a working version of dup2 ().
|
|
DUP2 = -DHAVE_DUP2
|
|
#endif /* HAVE_DUP2 */
|
|
|
|
SYSTEM_FLAGS = $(LINEBUF) $(VPRINTF) $(UNISTD) $(GROUPS) $(RESOURCE) \
|
|
$(SIGHANDLER) $(SYSDEP) $(WAITH) $(GETWD) $(DUP2) $(STRERROR) \
|
|
-D$(MACHINE) -D$(OS)
|
|
DEBUG_FLAGS = $(PROFILE_FLAGS) -g
|
|
LDFLAGS = $(NOSHARE) $(SYSDEP_LD) $(EXTRA_LD_PATH) $(DEBUG_FLAGS)
|
|
CFLAGS = $(DEBUG_FLAGS) $(SYSTEM_FLAGS) -DSHELL $(ALLOCA_CFLAGS)
|
|
CPPFLAGS= -I$(LIBSRC)
|
|
|
|
/* It is conceviable that you wish to edit some things beyond this point,
|
|
but I guess that it is highly unlikely, and may give you a headache. */
|
|
|
|
/* **************************************************************** */
|
|
/* */
|
|
/* How to Build a Library */
|
|
/* */
|
|
/* **************************************************************** */
|
|
|
|
/* Defines used when building libraries. */
|
|
#define LIB_CFLAGS_DECL CFLAGS='$(LIBRARY_CFLAGS) '$(LIBINC_USAGE)
|
|
#define LIB_CPPFLAGS_DECL CPPFLAGS='$(CPPFLAGS)'
|
|
#define LIB_LDFLAGS_DECL LDFLAGS='$(LDFLAGS)'
|
|
#define LIBMAKE_FLAGS LIB_CFLAGS_DECL LIB_CPPFLAGS_DECL LIB_LDFLAGS_DECL \
|
|
RANLIB='$(RANLIB)' AR='$(AR)' CC='$(CC)'
|
|
|
|
/* Macro does library building. */
|
|
#define build_lib_in_dir(directory) \
|
|
@echo "Building in " directory "..."; \
|
|
($(LIBINC_DECL); cd directory; $(MAKE) $(MFLAGS) LIBMAKE_FLAGS)
|
|
|
|
/* The builtins are somewhat special in that more information is needed
|
|
to compile them correctly. */
|
|
#define build_builtins_in_dir(directory) \
|
|
($(LIBINC_DECL); cd directory; \
|
|
$(MAKE) $(MFLAGS) CPPFLAGS='$(CPPFLAGS)' \
|
|
CFLAGS='$(CFLAGS) '$(LIBINC_USAGE)' -I.' LDFLAGS='$(LDFLAGS)' \
|
|
RANLIB='$(RANLIB)' AR='$(AR)' CC='$(CC)' DIRECTDEFINE='-D 'directory)
|
|
|
|
/* Flags used when building libraries. */
|
|
LIBRARY_CFLAGS = $(DEBUG_FLAGS) $(SIGHANDLER) $(ALLOCA_CFLAGS) \
|
|
$(SYSDEP) -D$(MACHINE) -D$(OS) $(UNISTD) -DSHELL
|
|
|
|
/**/# These are required for sending bug reports.
|
|
SYSTEM_NAME = $(MACHINE)
|
|
OS_NAME = $(OS)
|
|
|
|
/**/# The name of this program.
|
|
PROGRAM = bash
|
|
|
|
/**/# The type of machine Bash is being compiled on.
|
|
HOSTTYPE_DECL = -DHOSTTYPE='$(SYSTEM_NAME)'
|
|
|
|
/**/# The default primary and secondary prompts.
|
|
PPROMPT = '"${PROGRAM}\\$$ "'
|
|
SPROMPT = '"> "'
|
|
|
|
#if defined (MAINTAINER)
|
|
bash_maintainer = MAINTAINER
|
|
MAINTAIN_DEFINE = -DMAINTAINER='"$(bash_maintainer)"'
|
|
#endif
|
|
|
|
/**/# The group of configuration flags. These are for shell.c
|
|
CFG_FLAGS = -DPPROMPT=$(PPROMPT) -DSPROMPT=$(SPROMPT) -DOS_NAME='"$(OS_NAME)"'\
|
|
-DSYSTEM_NAME='$(SYSTEM_NAME)' $(SIGLIST_FLAG) $(MAINTAIN_DEFINE)
|
|
|
|
/**/# The directory which contains the source for malloc. The name must
|
|
/**/# end in a slash, as in "./lib/malloc/".
|
|
ALLOC_DIR = ./lib/malloc/
|
|
|
|
/**/# Our malloc.
|
|
#if defined (USE_GNU_MALLOC)
|
|
MALLOC = $(ALLOC_DIR)malloc.o
|
|
MALLOC_DEP = $(ALLOC_DIR)malloc.c $(ALLOC_DIR)getpagesize.h
|
|
MALLOC_FLAGS = -Drcheck -Dbotch=programming_error
|
|
#endif /* USE_GNU_MALLOC */
|
|
|
|
/* If this user doesn't have alloca (), then we must try to supply them
|
|
with a working one. */
|
|
#if !defined (HAVE_ALLOCA)
|
|
ALLOCA = $(ALLOC_DIR)alloca.o
|
|
# if defined (ALLOCA_ASM)
|
|
ALLOCA_SOURCE = $(ALLOC_DIR)ALLOCA_ASM
|
|
# else
|
|
ALLOCA_SOURCE = $(ALLOC_DIR)alloca.c
|
|
# endif /* ALLOCA_ASM */
|
|
#endif /* !HAVE_ALLOCA */
|
|
|
|
/* Compilation flags to use in the shell directory and to pass to builds
|
|
in subdirectories (readline, termcap) to ensure that alloca is treated
|
|
in a consistent fashion. */
|
|
#if defined (HAVE_ALLOCA_H)
|
|
ALLOCA_H_DEFINE = -DHAVE_ALLOCA_H
|
|
#else
|
|
ALLOCA_H_DEFINE =
|
|
#endif /* HAVE_ALLOCA_H */
|
|
|
|
#if defined (HAVE_ALLOCA)
|
|
ALLOCA_DEFINE = -DHAVE_ALLOCA
|
|
#else
|
|
ALLOCA_DEFINE =
|
|
#endif /* HAVE_ALLOCA */
|
|
|
|
ALLOCA_CFLAGS = $(ALLOCA_DEFINE) $(ALLOCA_H_DEFINE)
|
|
|
|
/* Protect the `i386' used in the definition of ALLOC_FILES. */
|
|
#if defined (i386)
|
|
# undef i386
|
|
# define i386_defined
|
|
#endif /* i386 */
|
|
|
|
ALLOC_HEADERS = $(ALLOC_DIR)getpagesize.h
|
|
ALLOC_FILES = $(ALLOC_DIR)malloc.c $(ALLOC_DIR)alloca.c $(ALLOC_DIR)xmalloc.c \
|
|
$(ALLOC_DIR)i386-alloca.s $(ALLOC_DIR)x386-alloca.s
|
|
|
|
/* Perhaps restore the `i386' define. */
|
|
#if defined (i386_defined)
|
|
# define i386
|
|
# undef i386_defined
|
|
#endif /* i386_defined */
|
|
|
|
#if !defined (HAVE_SYS_SIGLIST)
|
|
/**/# Since this system does not have sys_siglist, we define SIGLIST
|
|
/**/# as siglist.o.
|
|
SIGLIST = siglist.o
|
|
SIGLIST_FLAG=-DINITIALIZE_SIGLIST
|
|
#endif /* HAVE_SYS_SIGLIST */
|
|
|
|
#if !defined (HAVE_GETCWD)
|
|
/**/# Since this system does not have a correctly working getcwd (), we
|
|
/**/# define GETCWD as getcwd.o.
|
|
GETCWD = getcwd.o
|
|
#endif /* !HAVE_GETCWD */
|
|
|
|
/**/# The location of ranlib on your system.
|
|
#if defined (RANLIB_LOCATION)
|
|
RANLIB = RANLIB_LOCATION
|
|
#else
|
|
RANLIB = ranlib
|
|
#endif /* RANLIB_LOCATION */
|
|
|
|
/**/# Support for the libraries required. Termcap, Glob, and Readline.
|
|
/**/# The location of sources for the support libraries.
|
|
LIBSRC = ./lib/
|
|
LIBINC_DECL = LIBINCDIR=`pwd`; export LIBINCDIR
|
|
LIBINC_USAGE = "-I$${LIBINCDIR} -I$${LIBINCDIR}/$(LIBSRC)"
|
|
|
|
/* Does this machine's linker need a space after -L? */
|
|
#if defined (HAVE_GCC)
|
|
# undef SEARCH_LIB_NEEDS_SPACE
|
|
#endif /* HAVE_GCC */
|
|
|
|
#if defined (SEARCH_LIB_NEEDS_SPACE)
|
|
/**/# The native compiler for this machines requires a space after '-L'.
|
|
SEARCH_LIB = -L $(UNSET_VARIABLE_CREATES_SPACE)
|
|
#else
|
|
SEARCH_LIB = -L
|
|
#endif /* !SEARCH_LIB_NEEDS_SPACE */
|
|
|
|
#if defined (EXTRA_LIB_SEARCH_PATH)
|
|
LOCAL_LD_PATH = EXTRA_LIB_SEARCH_PATH
|
|
EXTRA_LD_PATH = $(SEARCH_LIB)$(LOCAL_LD_PATH)
|
|
#endif /* EXTRA_LIB_SEARCH_PATH */
|
|
|
|
RLIBSRC = $(LIBSRC)readline/
|
|
RLIBDOC = $(RLIBSRC)doc/
|
|
|
|
/**/# The source, object and documentation of the history library.
|
|
HISTORY_SOURCE = $(RLIBSRC)history.c $(RLIBSRC)history.h
|
|
HISTORY_OBJ = $(RLIBSRC)history.o
|
|
HISTORY_DOC = $(RLIBDOC)hist.texinfo $(RLIBDOC)hsuser.texinfo \
|
|
$(RLIBDOC)hstech.texinfo
|
|
|
|
/**/# The source, object and documentation of the GNU Readline library.
|
|
/**/# The source to the history library is inherently part of this.
|
|
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\
|
|
$(RLIBSRC)vi_mode.c $(GLIBSRC)tilde.c $(HISTORY_SOURCE)
|
|
|
|
READLINE_OBJ = $(RLIBSRC)readline.o $(RLIBSRC)funmap.o \
|
|
$(RLIBSRC)keymaps.o $(GLIBSRC)tilde.o $(HISTORY_OBJ)
|
|
|
|
READLINE_DOC = $(RLIBDOC)rlman.texinfo $(RLIBDOC)rluser.texinfo \
|
|
$(RLIBDOC)rltech.texinfo
|
|
|
|
READLINE_DOC_SUPPORT = $(RLIBDOC)Makefile $(RLIBDOC)texinfo.tex \
|
|
$(RLIBDOC)texindex.c $(RLIBDOC)readline.dvi \
|
|
$(RLIBDOC)readline.info $(RLIBDOC)history.dvi \
|
|
$(RLIBDOC)history.info
|
|
|
|
/**/# This has to be written funny to avoid looking like a C comment starter.
|
|
READLINE_EXAMPLES = $(RLIBSRC)examples/[a-zA-Z]*.[ch] \
|
|
$(RLIBSRC)examples/Makefile $(RLIBSRC)examples/Inputrc
|
|
|
|
/**/# Support files for GNU Readline.
|
|
READLINE_SUPPORT = $(RLIBSRC)Makefile $(RLIBSRC)ChangeLog $(RLIBSRC)COPYING \
|
|
$(READLINE_EXAMPLES) $(READLINE_DOC_SUPPORT)
|
|
|
|
#if defined (HAVE_READLINE_SOURCE)
|
|
READLINE_CFLAGS = $(DEBUG_FLAGS) $(SIGHANDLER) $(ALLOCA_CFLAGS) \
|
|
$(SYSDEP) -D$(MACHINE) -D$(OS) $(UNISTD)
|
|
#define READLINE_LIBRARY ./lib/readline/libreadline.a
|
|
#else
|
|
#define READLINE_LIBRARY -lreadline
|
|
#endif
|
|
|
|
#if defined (USE_GNU_TERMCAP)
|
|
#define HAVE_TERMCAP_SOURCE
|
|
/**/# The source, object and documentation for the GNU Termcap library.
|
|
TLIBSRC = $(LIBSRC)termcap/
|
|
#define TERMCAP_LIBRARY ./lib/termcap/libtermcap.a
|
|
|
|
TERMCAP_SOURCE = $(TLIBSRC)termcap.c $(TLIBSRC)tparam.c
|
|
TERMCAP_OBJ = $(TLIBSRC)libtermcap.a
|
|
TERMCAP_DOC = $(TLIBSRC)termcap.texinfo
|
|
TERMCAP_SUPPORT = $(TLIBSRC)Makefile $(TLIBSRC)ChangeLog
|
|
TERMCAP_LDFLAGS = $(SEARCH_LIB)$(TLIBSRC)
|
|
#endif /* USE_GNU_TERMCAP */
|
|
|
|
/* The glob library is always used. */
|
|
#define USE_GLOB_LIBRARY
|
|
|
|
/* If we have the source to the glob library, then compile it. */
|
|
#if defined (USE_GLOB_LIBRARY)
|
|
GLIBSRC = $(LIBSRC)glob/
|
|
#define GLOB_LIBRARY ./lib/glob/libglob.a
|
|
|
|
/* Sometime in the future, we will have the finished GNU C Library globber. */
|
|
#if defined (POSIX_GLOBBING_SOURCE)
|
|
GLOB_SOURCE = $(GLIBSRC)glob.c $(GLIBSRC)fnmatch.c $(GLIBSRC)tilde.c \
|
|
$(GLIBSRC)glob.h $(GLIBSRC)ndir.h $(GLIBSRC)fnmatch.h
|
|
#else
|
|
GLOB_SOURCE = $(GLIBSRC)glob.c $(GLIBSRC)tilde.c \
|
|
$(GLIBSRC)fnmatch.c $(GLIBSRC)fnmatch.h
|
|
#endif /* POSIX_GLOBBING_SOURCE */
|
|
|
|
GLOB_OBJ = $(GLIBSRC)libglob.a
|
|
GLOB_DOC = $(GLIBSRC)glob.texinfo
|
|
GLOB_SUPPORT = $(GLIBSRC)Makefile $(GLIBSRC)ChangeLog
|
|
GLOB_LDFLAGS = $(SEARCH_LIB)$(GLIBSRC)
|
|
GLOB_LIB = -lglob
|
|
#endif /* USE_GLOB_LIBRARY */
|
|
|
|
/**/# Declare all of the sources for the libraries that we have.
|
|
LIBRARY_SOURCE = $(READLINE_SOURCE) $(TERMCAP_SOURCE) $(GLOB_SOURCE)
|
|
LIBRARY_DOC = $(READLINE_DOC) $(HISTORY_DOC) $(TERMCAP_DOC) $(GLOB_DOC)
|
|
LIBRARY_SUPPORT = $(READLINE_SUPPORT) $(TERMCAP_SUPPORT) $(GLOB_SUPPORT)
|
|
LIBRARY_TAR = $(LIBRARY_SOURCE) $(LIBRARY_DOC) $(LIBRARY_SUPPORT)
|
|
|
|
#if defined (READLINE)
|
|
/**/# You wish to compile with the line editing features installed.
|
|
READLINE_LIB = -lreadline
|
|
|
|
/**/# You only need termcap for readline.
|
|
#if defined (USE_TERMCAP_EMULATION)
|
|
TERMCAP_LIB = -lcurses
|
|
#else
|
|
TERMCAP_LIB = -ltermcap
|
|
#endif /* USE_TERMCAP_EMULATION */
|
|
|
|
/**/# Directory list for -L so that the link editor (ld) can find -lreadline.
|
|
#if defined (HAVE_READLINE_SOURCE)
|
|
READLINE_LDFLAGS = $(SEARCH_LIB)$(RLIBSRC) $(TERMCAP_LDFLAGS)
|
|
#else
|
|
READLINE_LDFLAGS = $(TERMCAP_LDFLAGS) $(SEARCH_LIB)/usr/gnu/lib \
|
|
$(SEARCH_LIB)/usr/local/lib
|
|
#endif /* HAVE_READLINE_SOURCE */
|
|
|
|
/**/# The source and object of the bash<->readline interface code.
|
|
RL_SUPPORT_SRC = bashline.c
|
|
RL_SUPPORT_OBJ = bashline.o
|
|
#endif /* READLINE */
|
|
|
|
#if defined (REQUIRED_LIBRARIES)
|
|
/**/# Locally required libraries.
|
|
LOCAL_LIBS = REQUIRED_LIBRARIES
|
|
#endif /* REQUIRED_LIBRARIES */
|
|
|
|
/**/# The order is important. Most dependent first.
|
|
LIBRARIES = $(READLINE_LIB) $(TERMCAP_LIB) $(GLOB_LIB) $(LOCAL_LIBS)
|
|
|
|
#if defined (HAVE_TERMCAP_SOURCE)
|
|
TERMCAP_DEP = TERMCAP_LIBRARY
|
|
#endif
|
|
|
|
#if defined (HAVE_READLINE_SOURCE)
|
|
READLINE_DEP = READLINE_LIBRARY
|
|
#endif
|
|
|
|
#if defined (USE_GLOB_LIBRARY)
|
|
GLOB_DEP = GLOB_LIBRARY
|
|
#else
|
|
GLOBC = glob.c tilde.c
|
|
GLOBO = glob.o tilde.o
|
|
#endif /* USE_GLOB_LIBRARY */
|
|
|
|
/**/# Source files for libraries that Bash depends on.
|
|
LIBDEP = $(READLINE_DEP) $(TERMCAP_DEP) $(GLOB_DEP)
|
|
|
|
/**/# Rules for cleaning the readline and termcap sources.
|
|
#if defined (HAVE_READLINE_SOURCE)
|
|
# define CLEAN_READLINE (cd $(RLIBSRC); $(MAKE) $(MFLAGS) clean)
|
|
#else
|
|
# define CLEAN_READLINE :
|
|
#endif /* HAVE_READLINE_SOURCE */
|
|
|
|
#if defined (HAVE_TERMCAP_SOURCE)
|
|
# define CLEAN_TERMCAP (cd $(TLIBSRC); $(MAKE) $(MFLAGS) clean)
|
|
#else
|
|
# define CLEAN_TERMCAP :
|
|
#endif /* HAVE_TERMCAP_SOURCE */
|
|
|
|
#if defined (USE_GLOB_LIBRARY)
|
|
# define CLEAN_GLOB (cd $(GLIBSRC); $(MAKE) $(MFLAGS) clean)
|
|
#else
|
|
# define CLEAN_GLOB :
|
|
#endif /* USE_GLOB_LIBRARY */
|
|
|
|
BUILTINS_LIB = builtins/libbuiltins.a
|
|
|
|
/**/# The main source code for the Bourne Again SHell.
|
|
CSOURCES = shell.c parse.y general.c make_cmd.c print_cmd.c y.tab.c \
|
|
dispose_cmd.c execute_cmd.c variables.c $(GLOBC) version.c \
|
|
expr.c copy_cmd.c flags.c subst.c hash.c mailcheck.c \
|
|
test.c trap.c jobs.c nojobs.c $(ALLOC_FILES) braces.c \
|
|
unwind_prot.c siglist.c getcwd.c $(RL_SUPPORT_SRC)
|
|
|
|
HSOURCES = shell.h flags.h trap.h hash.h jobs.h builtins.h alias.c y.tab.h \
|
|
general.h variables.h config.h $(ALLOC_HEADERS) alias.h maxpath.h \
|
|
quit.h machines.h posixstat.h filecntl.h unwind_prot.h
|
|
|
|
SOURCES = $(CSOURCES) $(HSOURCES) $(BUILTIN_DEFS)
|
|
|
|
/**/# Matching object files.
|
|
OBJECTS = shell.o y.tab.o general.o make_cmd.o print_cmd.o $(GLOBO) \
|
|
dispose_cmd.o execute_cmd.o variables.o copy_cmd.o \
|
|
expr.o flags.o jobs.o subst.o hash.o mailcheck.o test.o \
|
|
trap.o alias.o $(MALLOC) $(ALLOCA) braces.o unwind_prot.o \
|
|
$(SIGLIST) $(GETCWD) version.o $(RL_SUPPORT_OBJ) $(BUILTINS_LIB)
|
|
|
|
/**/# Where the source code of the shell builtins resides.
|
|
DEFDIR = builtins/
|
|
BUILTIN_DEFS = $(DEFDIR)alias.def $(DEFDIR)bind.def $(DEFDIR)break.def \
|
|
$(DEFDIR)builtin.def $(DEFDIR)cd.def $(DEFDIR)colon.def \
|
|
$(DEFDIR)command.def $(DEFDIR)declare.def \
|
|
$(DEFDIR)echo.def $(DEFDIR)enable.def $(DEFDIR)eval.def \
|
|
$(DEFDIR)exec.def $(DEFDIR)exit.def $(DEFDIR)fc.def \
|
|
$(DEFDIR)fg_bg.def $(DEFDIR)hash.def $(DEFDIR)help.def \
|
|
$(DEFDIR)history.def $(DEFDIR)jobs.def $(DEFDIR)kill.def \
|
|
$(DEFDIR)let.def $(DEFDIR)read.def $(DEFDIR)return.def \
|
|
$(DEFDIR)set.def $(DEFDIR)setattr.def $(DEFDIR)shift.def \
|
|
$(DEFDIR)source.def $(DEFDIR)suspend.def $(DEFDIR)test.def \
|
|
$(DEFDIR)times.def $(DEFDIR)trap.def $(DEFDIR)type.def \
|
|
$(DEFDIR)ulimit.def $(DEFDIR)umask.def $(DEFDIR)wait.def \
|
|
$(DEFDIR)getopts.def $(DEFDIR)reserved.def
|
|
BUILTIN_C_CODE = $(DEFDIR)mkbuiltins.c $(DEFDIR)common.c \
|
|
$(DEFDIR)hashcom.h $(GETOPT_SOURCE)
|
|
GETOPT_SOURCE = $(DEFDIR)getopt.c $(DEFDIR)getopt.h
|
|
PSIZE_SOURCE = $(DEFDIR)psize.sh $(DEFDIR)psize.c
|
|
BUILTIN_SUPPORT = $(DEFDIR)Makefile $(DEFDIR)ChangeLog $(PSIZE_SOURCE) \
|
|
$(BUILTIN_C_CODE)
|
|
|
|
/**/# Documentation for the shell.
|
|
DOCDIR = ./documentation/
|
|
BASH_TEXINFO = $(DOCDIR)*.texi $(DOCDIR)*.tex $(DOCDIR)texindex.c \
|
|
$(DOCDIR)*.dvi $(DOCDIR)Makefile
|
|
BASH_MAN = $(DOCDIR)bash.1
|
|
BASHDOCS = $(BASH_TEXINFO) $(BASH_MAN) INSTALL README RELEASE
|
|
DOCUMENTATION = $(BASHDOCS) $(LIBRARY_DOC)
|
|
|
|
/**/# Some example files demonstrating use of the shell.
|
|
/* This has to be written funny to avoid looking like a comment starter. */
|
|
EXAMPLES = examples/[a-zA-Z]*
|
|
|
|
ENDIAN_SUPPORT = endian.c
|
|
SDIR = ./support/
|
|
MKTARFILE = $(SDIR)mktarfile
|
|
SCRIPTS_SUPPORT = $(SDIR)mksysdefs $(SDIR)cppmagic $(SDIR)cat-s \
|
|
$(MKTARFILE) $(SDIR)mail-shell $(SDIR)inform
|
|
|
|
TEST_SUITE = ./test-suite/
|
|
TEST_SUITE_SUPPORT = $(TEST_SUITE)[a-zA-Z0-9]*
|
|
|
|
CREATED_SUPPORT = endian.aux endian.h sysdefs.h $(SDIR)getcppsyms
|
|
|
|
SUPPORT = configure $(ENDIAN_SUPPORT) $(SCRIPTS_SUPPORT) $(BUILTIN_SUPPORT) \
|
|
COPYING Makefile cpp-Makefile ChangeLog .distribution newversion.c \
|
|
$(EXAMPLES) $(SDIR)bash.xbm $(SDIR)getcppsyms.c $(TEST_SUITE_SUPPORT)
|
|
|
|
/**/# BAGGAGE consists of things that you want to keep with the shell for some
|
|
/**/# reason, but do not actually use; old source code, etc.
|
|
BAGGAGE = longest_sig.c
|
|
|
|
/**/# Things that the world at large needs.
|
|
THINGS_TO_TAR = $(SOURCES) $(LIBRARY_TAR) $(BASHDOCS) $(SUPPORT) $(BAGGAGE)
|
|
|
|
all: .made
|
|
|
|
/**/# Keep GNU Make from exporting the entire environment for small machines.
|
|
.NOEXPORT:
|
|
|
|
.made: $(PROGRAM)
|
|
cp .machine .made
|
|
|
|
$(PROGRAM): .build $(OBJECTS) $(LIBDEP) .distribution
|
|
$(RM) $@
|
|
$(CC) $(LDFLAGS) $(READLINE_LDFLAGS) $(GLOB_LDFLAGS) \
|
|
-o $(PROGRAM) $(OBJECTS) $(LIBRARIES)
|
|
|
|
.build: $(SOURCES) cpp-Makefile newversion.aux
|
|
if ./newversion.aux -build; then mv -f newversion.h version.h; fi
|
|
@echo
|
|
@echo " ***************************************************"
|
|
@echo " * *"
|
|
@echo " * Making Bash-`cat .distribution` for a $(MACHINE) running $(OS)."
|
|
@echo " * *"
|
|
@echo " ***************************************************"
|
|
@echo
|
|
@echo "$(PROGRAM) last made for a $(MACHINE) running $(OS)" >.machine
|
|
|
|
version.h: newversion.aux
|
|
if ./newversion.aux -build; then mv -f newversion.h version.h; fi
|
|
|
|
y.tab.c: parse.y shell.h
|
|
-if test -f y.tab.h; then mv -f y.tab.h old-y.tab.h; fi
|
|
@echo "Expect 12 reduce/reduce errors. No Problem."
|
|
$(BISON) -d parse.y
|
|
-if cmp -s old-y.tab.h y.tab.h; then mv old-y.tab.h y.tab.h; fi
|
|
|
|
#if defined (HAVE_READLINE_SOURCE)
|
|
READLINE_LIBRARY: $(READLINE_SOURCE)
|
|
build_lib_in_dir ($(RLIBSRC))
|
|
#endif /* HAVE_READLINE_SOURCE */
|
|
|
|
#if defined (HAVE_TERMCAP_SOURCE)
|
|
TERMCAP_LIBRARY: $(TERMCAP_SOURCE)
|
|
build_lib_in_dir ($(TLIBSRC))
|
|
#endif /* HAVE_TERMCAP_SOURCE */
|
|
|
|
#if defined (USE_GLOB_LIBRARY)
|
|
GLOB_LIBRARY: $(GLOB_SOURCE)
|
|
build_lib_in_dir ($(GLIBSRC))
|
|
#endif /* USE_GLOB_LIBRARY */
|
|
|
|
version.o: version.h version.c
|
|
|
|
shell.o: shell.h flags.h shell.c posixstat.h filecntl.h endian.h
|
|
$(CC) $(CFG_FLAGS) $(CFLAGS) $(CPPFLAGS) -c shell.c
|
|
|
|
endian.h: endian.aux
|
|
./endian.aux endian.h
|
|
|
|
endian.aux: endian.c
|
|
$(CC) $(CFLAGS) -o $@ endian.c
|
|
|
|
#if defined (USE_GNU_MALLOC)
|
|
/* Note that gcc correctly leaves the output file in the source directory. */
|
|
#if !defined (__GNUC__)
|
|
$(MALLOC): $(MALLOC_DEP)
|
|
$(CC) -I$(ALLOC_DIR) $(CFLAGS) $(MALLOC_FLAGS) -c $*.c
|
|
@-mv `basename $*`.o $(MALLOC) 2>/dev/null
|
|
#else
|
|
$(MALLOC): $(MALLOC_DEP)
|
|
$(CC) -I$(ALLOC_DIR) $(CFLAGS) $(MALLOC_FLAGS) \
|
|
-o $(MALLOC) -c $*.c
|
|
#endif /* __GNUC__ */
|
|
#endif /* USE_GNU_MALLOC */
|
|
|
|
#if !defined (HAVE_ALLOCA)
|
|
/* Note that gcc correctly leaves the output file in the source directory. */
|
|
$(ALLOCA): $(ALLOCA_SOURCE)
|
|
$(CC) -I$(ALLOC_DIR) $(CFLAGS) -c $(ALLOCA_SOURCE)
|
|
@-mv `basename $*`.o $(ALLOCA) >/dev/null 2>&1
|
|
#endif /* !HAVE_ALLOCA */
|
|
|
|
variables.o: shell.h hash.h flags.h variables.h variables.c
|
|
$(CC) -c $(CFLAGS) $(CPPFLAGS) $(HOSTTYPE_DECL) variables.c
|
|
|
|
builtins/libbuiltins.a: $(BUILTIN_DEFS) $(BUILTIN_C_CODE)
|
|
build_builtins_in_dir ($(DEFDIR))
|
|
|
|
/* Dependencies for the main bash source. */
|
|
shell.h: general.h variables.h config.h quit.h
|
|
jobs.h: endian.h quit.h
|
|
variables.h: hash.h
|
|
braces.o: general.h
|
|
copy_cmd.o: shell.h hash.h
|
|
copy_cmd.o: general.h variables.h config.h quit.h
|
|
dispose_cmd.o: shell.h
|
|
dispose_cmd.o: general.h variables.h config.h quit.h
|
|
execute_cmd.o: shell.h y.tab.h posixstat.h flags.h jobs.h
|
|
execute_cmd.o: general.h variables.h config.h quit.h hash.h endian.h
|
|
execute_cmd.o: unwind_prot.h
|
|
expr.o: shell.h hash.h
|
|
expr.o: general.h variables.h config.h quit.h
|
|
flags.o: flags.h config.h general.h quit.h
|
|
general.o: shell.h maxpath.h
|
|
general.o: general.h variables.h config.h quit.h
|
|
hash.o: shell.h hash.h
|
|
hash.o: general.h variables.h config.h quit.h
|
|
jobs.o: shell.h hash.h trap.h jobs.h
|
|
jobs.o: general.h variables.h config.h endian.h quit.h
|
|
mailcheck.o: posixstat.h maxpath.h variables.h
|
|
mailcheck.o: hash.h quit.h
|
|
make_cmd.o: shell.h flags.h
|
|
make_cmd.o: general.h variables.h config.h quit.h
|
|
y.tab.o: shell.h flags.h maxpath.h
|
|
y.tab.o: general.h variables.h config.h quit.h
|
|
print_cmd.o: shell.h y.tab.h
|
|
print_cmd.o: general.h variables.h config.h quit.h
|
|
shell.o: shell.h flags.h
|
|
shell.o: general.h variables.h config.h quit.h
|
|
subst.o: shell.h flags.h alias.h jobs.h
|
|
subst.o: general.h variables.h config.h endian.h quit.h
|
|
test.o: posixstat.h
|
|
trap.o: trap.h shell.h hash.h unwind_prot.h
|
|
trap.o: general.h variables.h config.h quit.h
|
|
unwind_prot.o: config.h general.h unwind_prot.h
|
|
|
|
#if !defined (JOB_CONTROL)
|
|
jobs.o: nojobs.c
|
|
#endif
|
|
|
|
#if defined (READLINE)
|
|
bashline.o: shell.h hash.h builtins.h
|
|
bashline.o: general.h variables.h config.h quit.h alias.h
|
|
#endif
|
|
|
|
/* Dependencies which rely on the user using the source to READLINE. */
|
|
#if defined (HAVE_READLINE_SOURCE)
|
|
bashline.o: $(RLIBSRC)chardefs.h $(RLIBSRC)history.h $(RLIBSRC)readline.h
|
|
bashline.o: $(RLIBSRC)keymaps.h $(RLIBSRC)history.h
|
|
y.tab.o: $(RLIBSRC)keymaps.h $(RLIBSRC)chardefs.h $(RLIBSRC)history.h
|
|
y.tab.o: $(RLIBSRC)readline.h
|
|
subst.o: $(RLIBSRC)history.h
|
|
#endif /* HAVE_READLINE_SOURCE */
|
|
|
|
#if defined (USE_GLOB_LIBRARY)
|
|
subst.o: $(GLIBSRC)fnmatch.h
|
|
execute_cmd.o: $(GLIBSRC)fnmatch.h
|
|
# if defined (POSIX_GLOBBING_SOURCE)
|
|
subst.o: $(GLIBSRC)glob.h
|
|
# endif /* POSIX_GLOBBING_SOURCE */
|
|
#endif /* USE_GLOB_LIBRARY */
|
|
|
|
$(PROGRAM).tar: $(THINGS_TO_TAR) .distribution
|
|
@$(MKTARFILE) $(PROGRAM) `cat .distribution` $(THINGS_TO_TAR)
|
|
|
|
$(PROGRAM).tar.Z: $(PROGRAM).tar
|
|
compress -f $(PROGRAM).tar
|
|
|
|
clone: $(THINGS_TO_TAR)
|
|
@$(MKTARFILE) +notar $(MACHINE) $(OS) $(THINGS_TO_TAR)
|
|
|
|
install: .made
|
|
-if [ -f $(DESTDIR)/$(PROGRAM) ]; \
|
|
then mv $(DESTDIR)/$(PROGRAM) $(DESTDIR)/$(PROGRAM).old; \
|
|
fi
|
|
cp $(PROGRAM) $(DESTDIR)/$(PROGRAM)
|
|
$(RM) 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 -dist `$(PROGRAM) -c 'echo $$BASH_VERSION'`
|
|
|
|
distribution: $(PROGRAM) $(PROGRAM).tar.Z .distribution
|
|
@echo cp $(PROGRAM).tar.Z $(PROGRAM)-`cat .distribution`.tar.Z
|
|
@cp $(PROGRAM).tar.Z $(PROGRAM)-`cat .distribution`.tar.Z
|
|
|
|
newversion.aux: newversion.c
|
|
$(CC) $(DEBUG_FLAGS) -o newversion.aux newversion.c -lm
|
|
|
|
newversion: newversion.aux
|
|
$(RM) .build
|
|
./newversion.aux -dist
|
|
mv -f newversion.h version.h
|
|
$(MAKE) $(MFLAGS)
|
|
|
|
documentation: documentation-frob
|
|
(cd $(DOCDIR); make)
|
|
|
|
documentation-frob:
|
|
|
|
tags: $(SOURCES) $(BUILTIN_C_CODE) $(LIBRARY_SOURCE)
|
|
etags $(SOURCES) $(BUILTIN_C_CODE) $(LIBRARY_SOURCE)
|
|
|
|
INDEX: $(SOURCES) $(BUILTIN_C_CODE) $(LIBRARY_SOURCE)
|
|
ctags -x $(SOURCES) $(BUILTIN_C_CODE) $(LIBRARY_SOURCE) > $@
|
|
|
|
clean:
|
|
$(RM) $(OBJECTS) $(PROGRAM) aix-Makefile *.aux
|
|
$(RM) .build .made version.h
|
|
$(RM) $(CREATED_SUPPORT) bash-Makefile
|
|
(cd $(DOCDIR); $(MAKE) $(MFLAGS) clean)
|
|
(cd builtins; $(MAKE) $(MFLAGS) clean)
|
|
CLEAN_READLINE;CLEAN_TERMCAP;CLEAN_GLOB
|
|
|
|
/**/# Here is a convenient rule when you arrive at a new site and wish to
|
|
/**/# install bash on several different architectures. It creates a new
|
|
/**/# directory to hold the results of compilatation. The directory is
|
|
/**/# named MACHINE-OS.
|
|
architecture: $(MACHINE)-$(OS)/$(PROGRAM)
|
|
|
|
$(MACHINE)-$(OS):
|
|
-mkdir $(MACHINE)-$(OS)
|
|
|
|
$(MACHINE)-$(OS)/$(PROGRAM): $(MACHINE)-$(OS) $(PROGRAM)
|
|
mv $(PROGRAM) $(MACHINE)-$(OS)
|
|
mv sysdefs.h $(MACHINE)-$(OS)
|
|
mv $(SDIR)getcppsyms $(MACHINE)-$(OS)
|
|
$(MAKE) $(MFLAGS) clean
|