Hello,
I'm not a regular subscriber to this list. I'm just following
the suggestion in the README. Please excuse me if this bug has
already been hashed to death.
I ran into a problem installing GPC(gpc-19990118) after the
compile. I am running Solaris 2.7 (sparc) with gcc 2.8.1. I copied
the "p" directory to the gcc-2.8.1 source directory. Installed
the patches. Compiled C/C++/GPC without a problem.
The problem started when I tried to "make install". Particularly,
in the "pascal.install-info" section. Anyway, I tracked it down
to a problem in the "Make-lang.in" file.
Basicly, in the "Make-lang.in", whenever you had a "cd" before
a call to ($INSTALL_DATA) the Makefile couldn't find "./install.sh -c".
Also, I had to remove the "$$f" (files) from the Target-Dir option
to "install.sh"
I hope this helps,
__Jim O'Dell
Here's the Make-lang.in I used to install GPC
**********************************************************************
# -*- mode: makefile-mode -*-
# Top level makefile fragment for GNU Pascal.
# Copyright (C) 1994, 1995 Free Software Foundation, Inc.
#This file is part of GNU Pascal.
#GNU Pascal 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, or (at your option)
#any later version.
#GNU Pascal 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 GNU Pascal; see the file COPYING. If not, write to
#the Free Software Foundation, 59 Temple Place - Suite 330,
#Boston, MA 02111-1307, USA.
# This file provides the language dependent support in the main Makefile.
# Each language makefile fragment must provide the following targets:
#
# foo.all.build, foo.all.cross, foo.start.encap, foo.rest.encap,
# foo.info, foo.dvi,
# foo.install-normal, foo.install-common, foo.install-info, foo.install-man,
# foo.uninstall, foo.distdir,
# foo.mostlyclean, foo.clean, foo.distclean, foo.extraclean,
# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
#
# where `foo' is the name of the language.
#
# It should also provide rules for:
#
# - making any compiler driver (eg: gpc)
# - the compiler proper (eg: gpc1)
# - define the names for selecting the language in LANGUAGES.
# Can be overwritten for DJGPP host
HARDLINK=ln
# Where to install the demos (relative to the prefix)
DEMO_DIR=doc/gpc/demos
demodir=$(prefix)/$(DEMO_DIR)
# Analogous to objext
interfaceext=.gpi
# Version numbers
gpc_major=2
gpc_minor=0
gpc_release=19990118
gpc_version=$(gpc_release)
rts_version=$(gpc_release)
# Extra flags to pass to recursive makes.
GPC_FLAGS_TO_PASS = \
"CROSS=$(CROSS)" \
"X_CFLAGS=$(X_CFLAGS)" \
"GPC_EGCS_FLAG=$(GPC_EGCS_FLAG)" \
"EXTRA_LIBS=$(EXTRA_LIBS)" \
"MAYBE_TARGET_DEFAULT=$(MAYBE_TARGET_DEFAULT)" \
"MAYBE_USE_COLLECT2=$(MAYBE_USE_COLLECT2)" \
"SCHED_CFLAGS=$(SCHED_CFLAGS)" \
"includedir=`echo '$(includedir)'|sed -e 's/\\$$/\\\\&&/g'`" \
"libsubdir=`echo '$(libsubdir)'|sed -e 's/\\$$/\\\\&&/g'`" \
"target_alias=$(target_alias)" \
"gpc_version=$(gpc_version)" \
"rts_version=$(rts_version)" \
"version=$(version)"
# "LIBS=`echo \"$(LIBS)\"|sed -e 's,\.\./libiberty/libiberty\.a,../../libiberty/libiberty.a,g' -e 's,obstack.o,../obstack.o,g'`" \
# Extra flags to pass when building the RTS.
RTS_FLAGS_TO_PASS = \
CROSS="$(CROSS)" \
AR_FLAGS="$(AR_FLAGS)" \
AR_FOR_TARGET="$(AR_FOR_TARGET)" \
BISON="$(BISON)" \
BISONFLAGS="$(BISONFLAGS)" \
CFLAGS="$(CFLAGS)" \
X_CFLAGS="$(X_CFLAGS)" \
LDFLAGS="$(LDFLAGS)" \
RANLIB="$(RANLIB)" \
RANLIB_TEST="$(RANLIB_TEST)" \
RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \
RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \
SHELL="$(SHELL)"
# Actual names to use when installing a native compiler.
GPC_INSTALL_NAME = `t='$(program_transform_name)'; echo gpc | sed $$t`
# Additional driver aliases.
PC_INSTALL_NAME = `t='$(program_transform_name)'; echo pc | sed $$t`
EPC_INSTALL_NAME = `t='$(program_transform_name)'; echo epc | sed $$t`
BPC_INSTALL_NAME = `t='$(program_transform_name)'; echo bpc | sed $$t`
# Actual names to use when installing a cross-compiler.
GPC_CROSS_NAME = `t='$(program_transform_cross_name)'; echo gpc | sed $$t`
# Additional cross driver aliases.
PC_CROSS_NAME = `t='$(program_transform_cross_name)'; echo pc | sed $$t`
EPC_CROSS_NAME = `t='$(program_transform_cross_name)'; echo epc | sed $$t`
BPC_CROSS_NAME = `t='$(program_transform_cross_name)'; echo bpc | sed $$t`
# The GPC to use for compiling libgpc.a
# Usually the one we just built.
GPC_FOR_TARGET = ./xgpc -B./
# Define the names for selecting Pascal in LANGUAGES.
Pascal pascal: xgpc$(exeext) gpc1$(exeext) gpc-cpp$(exeext) pascal.rts specs
# Tell GNU make to ignore these if they exist.
.PHONY: Pascal pascal
GPC_SRCS = \
$(srcdir)/c-aux-info.c \
$(srcdir)/c-iterate.c \
$(srcdir)/c-pragma.c \
$(srcdir)/convert.c \
$(srcdir)/dbxout.c \
$(srcdir)/expr.c \
$(srcdir)/fold-const.c \
$(srcdir)/function.c \
$(srcdir)/optabs.c \
$(srcdir)/stor-layout.c \
$(srcdir)/toplev.c \
$(srcdir)/tree.c \
$(srcdir)/p/assert_.h \
$(srcdir)/p/circle-buf.c \
$(srcdir)/p/circle-buf.h \
$(srcdir)/p/gbe.h \
$(srcdir)/p/gpc-common.c \
$(srcdir)/p/gpc-convert.c \
$(srcdir)/p/gpc-decl.c \
$(srcdir)/p/gpc-defs.h \
$(srcdir)/p/gpc-lang.c \
$(srcdir)/p/gpc-lang.h \
$(srcdir)/p/gpc-lex.c \
$(srcdir)/p/gpc-typeck.c \
$(srcdir)/p/gpi-hash.c \
$(srcdir)/p/gpi-hash.h \
$(srcdir)/p/lang-options.h \
$(srcdir)/p/lang-specs.h \
$(srcdir)/p/mkstemp.c \
$(srcdir)/p/module.c \
$(srcdir)/p/module.h \
$(srcdir)/p/objects.c \
$(srcdir)/p/objects.h \
$(srcdir)/p/parse.y \
$(srcdir)/p/setop.c \
$(srcdir)/p/setop.h \
$(srcdir)/p/rts.c \
$(srcdir)/p/rts.h \
$(srcdir)/p/types.c \
$(srcdir)/p/types.h \
$(srcdir)/p/util.c \
$(srcdir)/p/util.h \
$(srcdir)/p/version.c
GPC_TEXI = $(srcdir)/p/doc/gpc.texi \
$(srcdir)/p/doc/copying.texi \
$(srcdir)/p/doc/funding.texi \
$(srcdir)/p/doc/lookfeel.texi \
$(srcdir)/p/doc/gnu.texi \
$(srcdir)/p/doc/contributors.texi \
$(srcdir)/p/doc/welcome.texi \
$(srcdir)/p/doc/install.texi \
$(srcdir)/p/doc/invoke.texi \
$(srcdir)/p/doc/programming.texi \
$(srcdir)/p/doc/reference.texi \
$(srcdir)/p/doc/keywords.texi \
$(srcdir)/p/doc/builtin.texi \
$(srcdir)/p/doc/extend.texi \
$(srcdir)/p/doc/borland2ep.texi \
$(srcdir)/p/doc/bpqstart.texi \
$(srcdir)/p/doc/bugs.texi \
$(srcdir)/p/doc/support.texi \
$(srcdir)/p/doc/how-to-contrib.texi \
$(srcdir)/p/doc/gpc-source.texi \
$(srcdir)/p/doc/notes.texi \
$(srcdir)/p/doc/pvs.texi \
$(srcdir)/p/doc/sets.texi
p/gpc.o: $(srcdir)/p/gpc.c $(CONFIG_H) gansidecl.h multilib.h Makefile $(lang_specs_files)
$(CC) -DGPC $(GPC_EGCS_FLAG) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-DGPC_MAJOR="\"$(gpc_major)\"" \
-DGPC_MINOR="\"$(gpc_minor)\"" \
-DGPC_RELEASE="\"$(gpc_release)\"" \
$(DRIVER_DEFINES) \
-c `echo $(srcdir)/p/gpc.c | sed 's,^\./,,'` -o $@
p/gpc_date:
date '+%h %e %Y' > $@
p/gpc_time:
date '+%H:%M:%S' > $@
p/version.o: p/gpc_date p/gpc_time $(srcdir)/p/version.c config.status
$(CC) -DGPC $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-DGPC_TIME="\"`cat p/gpc_time`\"" \
-DGPC_DATE="\"`cat p/gpc_date`\"" \
-DGCC_VERSION="\"$(version)\"" \
-DGPC_VERSION="\"$(gpc_version)\"" \
-c `echo $(srcdir)/p/version.c | sed 's,^\./,,'` -o $@
p/mkstemp.o: p/mkstemp.c
$(CC) -DGPC $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $< -o $@
# We call this executable `xgpc' rather than `gpc'
# to avoid confusion if the current directory is in the path
# and PC is `gpc'. It is renamed to `gpc' when it is installed.
xgpc$(exeext): p/gpc.o version.o choose-temp.o pexecute.o prefix.o p/version.o \
p/mkstemp.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ p/gpc.o prefix.o p/version.o \
choose-temp.o pexecute.o p/mkstemp.o $(EXTRA_GCC_OBJS) $(LIBS) $(EXTRA_LIBS)
# Also create gpc-cross, so that pascal.install-common will install properly.
gpc-cross$(exeext): xgpc$(exeext)
cp xgpc$(exeext) gpc-cross$(exeext)
gpc1$(exeext): $(P) $(GPC_SRCS) $(LIBDEPS) stamp-objlist c-aux-info.o \
c-iterate.o c-pragma.o choose-temp.o pexecute.o p/mkstemp.o p/version.c
cd p; $(MAKE) $(FLAGS_TO_PASS) $(GPC_FLAGS_TO_PASS) ../gpc1$(exeext)
gpc-cpp$(exeext): $(P) mbchar.o cexp.o $(srcdir)/p/gpc-cccp.c $(srcdir)/p/version.c
cd p; $(MAKE) $(FLAGS_TO_PASS) $(GPC_FLAGS_TO_PASS) ../gpc-cpp$(exeext)
pascal.rts: p/rts/Makefile
case "$(LANGUAGES)" in \
*pascal*) cd p/rts && $(MAKE) \
GCC_FOR_TARGET="`case '$(GCC_FOR_TARGET)' in \
'./xgcc -B./'*) echo ../../xgcc -B../../;; \
*) echo '$(GCC_FOR_TARGET)';; esac`" \
GPC_FOR_TARGET="`case '$(GPC_FOR_TARGET)' in \
'./xgpc -B./'*) echo ../../xgpc -B../../;; \
*) echo '$(GPC_FOR_TARGET)';; esac`" \
GCC_FLAGS="$(GCC_FLAGS)" $(RTS_FLAGS_TO_PASS) \
all ;; \
esac
# The configuration of the runtime system relies on an autoconf-type
# configure, not a Cygnus-type one. It needs to be run *after* the
# appropriate (cross-)compiler has been built, thus depend on GCC_PARTS.
# `stmp-headers' ensures that float.h has been built.
# dj: Depending on $(GCC_PARTS) here is bad news - very bad news.
# mk: but it needs $(EXTRA_OBJS) and $(LIBGCC), what to do?
p/rts/Makefile: $(srcdir)/p/rts/Makefile.in $(srcdir)/p/rts/configure \
$(GCC_PARTS) stmp-headers
if [ -d p/rts ]; then true; else mkdir p/rts; fi
src=`cd $(srcdir); pwd`; \
cd p/rts; \
CC="`case '$(GCC_FOR_TARGET)' in \
'./xgcc -B./'*) echo ../../xgcc -B../../;; \
*) echo '$(GCC_FOR_TARGET)';; esac`" \
PC="`case '$(GPC_FOR_TARGET)' in \
'./xgpc -B./'*) echo ../../xgpc -B../../;; \
*) echo '$(GPC_FOR_TARGET)';; esac`" \
$(RTS_FLAGS_TO_PASS) CONFIG_SITE=nonexisting-file $(SHELL) \
$${src}/p/rts/configure --srcdir=$${src}/p/rts
# Derive parts of the documentation of the run time library directly
# from the source.
p/doc/gpcpas.texi: $(srcdir)/p/rts/gpc.pas
if [ -d p/doc ]; then true; else mkdir p/doc; fi
sed -e 's/[@{}]/@&/g' < $(srcdir)/p/rts/gpc.pas > p/doc/gpcpas.texi
# Build hooks:
pascal.all.build: xgpc$(exeext)
pascal.all.cross: gpc-cross$(exeext)
pascal.start.encap:
pascal.rest.encap:
pascal.info: p/doc/gpc.info
pascal.dvi: p/doc/gpc.dvi
p/doc/gpc.info: $(GPC_TEXI) p/doc/gpcpas.texi
if [ -d p/doc ]; then true; else mkdir p/doc; fi
src=`cd $(srcdir); pwd`; \
cd p/doc; $(MAKEINFO) -I$${src}/p/doc -o gpc.info $${src}/p/doc/gpc.texi
p/doc/gpc.dvi: $(GPC_TEXI) p/doc/gpcpas.texi
if [ -d p/doc ]; then true; else mkdir p/doc; fi
$(TEXI2DVI) -I$(srcdir)/p -o p/doc/gpc.dvi $(srcdir)/p/doc/gpc.texi
$(srcdir)/p/INSTALL: $(srcdir)/p/doc/install.texi
cd $(srcdir)/p; $(MAKEINFO) -DINSTALLONLY --no-header \
--no-split doc/install.texi -o INSTALL
# Install hooks:
# gpc1 is installed elsewhere as part of $(COMPILERS).
unitsubdir=$(libsubdir)/units
pascal.install-normal: install-gpc-cpp install-libgpc pascal.install-units pascal.install-demos
install-gpc-cpp: gpc-cpp$(exeext)
-rm -f $(libsubdir)/gpc-cpp$(exeext)
$(INSTALL_PROGRAM) gpc-cpp$(exeext) $(libsubdir)/gpc-cpp$(exeext)
install-libgpc: pascal.install-dir pascal.rts
-if [ -f libgpc.a ] ; then \
rm -f $(libsubdir)/libgpc.a; \
$(INSTALL_DATA) libgpc.a $(libsubdir)/libgpc.a; \
if $(RANLIB_TEST_FOR_TARGET) ; then \
(cd $(libsubdir); $(RANLIB_FOR_TARGET) libgpc.a); else true; fi; \
chmod a-x $(libsubdir)/libgpc.a; \
else true; fi
$(srcdir)/p/units/crtc.h: $(srcdir)/p/units/crt.inc
(echo '/* Automatically generated from crt.inc'; \
echo ' DO NOT CHANGE THIS FILE MANUALLY! */'; \
sed -e '1,/^const/d;s/^\([^=]*\)= #\?\([^;]*\);\(.*;\)\?$$/#define \1 \2/' \
-e '/^.\$$/d' < $(srcdir)/p/units/crt.inc) > $(srcdir)/p/units//crtc.h
pascal.install-units: pascal.install-dir $(srcdir)/p/units/crtc.h
$(INSTALL_DATA) $(srcdir)/p/rts/gpc.pas $(unitsubdir)/gpc.pas; \
chmod a-x $(unitsubdir)/gpc.pas; \
$(INSTALL_DATA) $(srcdir)/p/rts/internal.pas $(unitsubdir)/internal.pas; \
chmod a-x $(unitsubdir)/internal.pas; \
$(INSTALL_DATA) $(srcdir)/p/rts/getopt.h $(unitsubdir)/getopt.h; \
chmod a-x $(unitsubdir)/getopt.h; \
$(INSTALL_DATA) $(srcdir)/p/rts/pexecute.h $(unitsubdir)/pexecute.h; \
chmod a-x $(unitsubdir)/pexecute.h; \
cd $(srcdir)/p/units; \
for file in *.pas *.inc *.c *.h; do \
../../$(INSTALL_DATA) $$file $(unitsubdir); \
chmod a-x $(unitsubdir)/$$file; \
done
pascal.install-demos: pascal.install-dir
cd $(srcdir)/p/demos; \
for file in *; do \
../../$(INSTALL_DATA) $$file $(demodir); \
chmod a-x $(demodir)/$$file; \
done
# Install the driver program as $(target)-gpc
# and also as either gpc (if native) or $(tooldir)/bin/gpc.
pascal.install-common:
-if [ -f gpc1$(exeext) ] ; then \
if [ -f gpc-cross$(exeext) ] ; then \
rm -f $(bindir)/$(GPC_CROSS_NAME)$(exeext); \
$(INSTALL_PROGRAM) gpc-cross$(exeext) $(bindir)/$(GPC_CROSS_NAME)$(exeext); \
chmod a+x $(bindir)/$(GPC_CROSS_NAME)$(exeext); \
rm -f $(bindir)/$(PC_CROSS_NAME)$(exeext); \
$(HARDLINK) $(bindir)/$(GPC_CROSS_NAME)$(exeext) $(bindir)/$(PC_CROSS_NAME)$(exeext) \
> /dev/null 2>&1 \
|| cp $(bindir)/$(GPC_CROSS_NAME)$(exeext) $(bindir)/$(PC_CROSS_NAME)$(exeext) ; \
rm -f $(bindir)/$(EPC_CROSS_NAME)$(exeext); \
$(HARDLINK) $(bindir)/$(GPC_CROSS_NAME)$(exeext) $(bindir)/$(EPC_CROSS_NAME)$(exeext) \
> /dev/null 2>&1 \
|| cp $(bindir)/$(GPC_CROSS_NAME)$(exeext) $(bindir)/$(EPC_CROSS_NAME)$(exeext) ; \
rm -f $(bindir)/$(BPC_CROSS_NAME)$(exeext); \
$(HARDLINK) $(bindir)/$(GPC_CROSS_NAME)$(exeext) $(bindir)/$(BPC_CROSS_NAME)$(exeext) \
> /dev/null 2>&1 \
|| cp $(bindir)/$(GPC_CROSS_NAME)$(exeext) $(bindir)/$(BPC_CROSS_NAME)$(exeext) ; \
else \
rm -f $(bindir)/$(GPC_INSTALL_NAME)$(exeext); \
$(INSTALL_PROGRAM) xgpc$(exeext) $(bindir)/$(GPC_INSTALL_NAME)$(exeext); \
chmod a+x $(bindir)/$(GPC_INSTALL_NAME)$(exeext); \
rm -f $(bindir)/$(PC_INSTALL_NAME)$(exeext); \
$(HARDLINK) $(bindir)/$(GPC_INSTALL_NAME)$(exeext) $(bindir)/$(PC_INSTALL_NAME)$(exeext) \
> /dev/null 2>&1 \
|| cp $(bindir)/$(GPC_INSTALL_NAME)$(exeext) $(bindir)/$(PC_INSTALL_NAME)$(exeext) ; \
rm -f $(bindir)/$(EPC_INSTALL_NAME)$(exeext); \
$(HARDLINK) $(bindir)/$(GPC_INSTALL_NAME)$(exeext) $(bindir)/$(EPC_INSTALL_NAME)$(exeext) \
> /dev/null 2>&1 \
|| cp $(bindir)/$(GPC_INSTALL_NAME)$(exeext) $(bindir)/$(EPC_INSTALL_NAME)$(exeext) ; \
rm -f $(bindir)/$(BPC_INSTALL_NAME)$(exeext); \
$(HARDLINK) $(bindir)/$(GPC_INSTALL_NAME)$(exeext) $(bindir)/$(BPC_INSTALL_NAME)$(exeext) \
> /dev/null 2>&1 \
|| cp $(bindir)/$(GPC_INSTALL_NAME)$(exeext) $(bindir)/$(BPC_INSTALL_NAME)$(exeext) ; \
fi ; \
fi
pascal.install-info: pascal.info
-rm -f $(infodir)/gpc.info* ;
if [ -f p/doc/gpc.info ]; then \
cd p/doc; \
else \
cd $(srcdir)/p/doc; \
fi; \
for f in gpc.info*; do \
../../$(INSTALL_DATA) $$f $(infodir); \
done
-chmod a-x $(infodir)/gpc.info*
pascal.install-man: $(srcdir)/p/gpc.1
-if [ -f gpc1$(exeext) ] ; then \
if [ -f gpc-cross$(exeext) ] ; then \
rm -f $(mandir)/$(GPC_CROSS_NAME)$(manext); \
$(INSTALL_DATA) $(srcdir)/p/gpc.1 $(mandir)/$(GPC_CROSS_NAME)$(manext); \
chmod a-x $(mandir)/$(GPC_CROSS_NAME)$(manext); \
for f in $(PC_CROSS_NAME) $(EPC_CROSS_NAME) $(BPC_CROSS_NAME); do \
rm -f $(mandir)/$$f$(manext); \
ln -s $(GPC_CROSS_NAME)$(manext) $(mandir)/$$f$(manext); \
done; \
else \
rm -f $(mandir)/$(GPC_INSTALL_NAME)$(manext); \
$(INSTALL_DATA) $(srcdir)/p/gpc.1 $(mandir)/$(GPC_INSTALL_NAME)$(manext); \
chmod a-x $(mandir)/$(GPC_INSTALL_NAME)$(manext); \
for f in $(PC_INSTALL_NAME) $(EPC_INSTALL_NAME) $(BPC_INSTALL_NAME); do \
rm -f $(mandir)/$$f$(manext); \
ln -s $(GPC_INSTALL_NAME)$(manext) $(mandir)/$$f$(manext); \
done; \
fi; \
else true; fi
pascal.install-dir:
-for directory in $(bindir) $(libsubdir) $(unitsubdir) $(demodir) $(infodir) $(mandir); do \
if [ -d $$directory ]; then \
true; \
else \
mkdir -p $$directory; \
fi; \
done
# Install gpc1 et.al.
# Do *not* overwrite files if they exist.
pascal.install-compiler: pascal
for file in gpc1$(exeext); do \
if [ -f $$file ] ; then \
rm -f $(libsubdir)/$$file; \
$(INSTALL_PROGRAM) $$file $(libsubdir)/$$file; \
else true; \
fi; \
done
for file in $(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2) ..; do \
if [ x"$$file" != x.. ]; then \
if ! [ -f $(libsubdir)/$$file ]; then \
$(INSTALL_PROGRAM) $$file $(libsubdir)/$$file; else true; fi; \
else true; fi; \
done
for file in $(EXTRA_PARTS) ..; do \
if [ x"$$file" != x.. ]; then \
if ! [ -f $(libsubdir)/$$file ]; then \
$(INSTALL_DATA) $$file $(libsubdir); else true; fi; \
else true; fi; \
done
# Don't mess with specs if it doesn't exist yet.
-if [ -f specs ] ; then \
if ! [ -f $(libsubdir)/specs ]; then \
$(INSTALL_DATA) specs $(libsubdir)/specs; fi; \
fi
# Install libgcc.a FIXME: doesn't handle multilib (multiple libgcc.a)
-if [ -f libgcc.a ] ; then \
if ! [ -f $(libsubdir)/libgcc.a ]; then \
$(INSTALL_DATA) libgcc.a $(libsubdir)/libgcc.a; \
if $(RANLIB_TEST_FOR_TARGET) ; then \
(cd $(libsubdir); $(RANLIB_FOR_TARGET) libgcc.a); else true; fi; \
chmod a-x $(libsubdir)/libgcc.a; fi; \
else true; fi
# This target will install GPC into an existing GCC installation,
# without overwriting existing files.
# The semicolon is to prevent the install.sh -> install default rule
# from doing anything. Having it run true helps avoid problems and
# noise from versions of make which don't like to have null commands.
pascal.install: pascal.install-dir pascal.install-compiler pascal.install-common \
pascal.install-normal pascal.install-info pascal.install-man ; @true
pascal.uninstall:
-rm -rf $(bindir)/$(GPC_INSTALL_NAME)$(exeext)
-rm -rf $(bindir)/$(GPC_CROSS_NAME)$(exeext)
-rm -rf $(bindir)/$(PC_INSTALL_NAME)$(exeext)
-rm -rf $(bindir)/$(PC_CROSS_NAME)$(exeext)
-rm -rf $(bindir)/$(EPC_INSTALL_NAME)$(exeext)
-rm -rf $(bindir)/$(EPC_CROSS_NAME)$(exeext)
-rm -rf $(bindir)/$(BPC_INSTALL_NAME)$(exeext)
-rm -rf $(bindir)/$(BPC_CROSS_NAME)$(exeext)
-rm -rf $(mandir)/$(GPC_INSTALL_NAME)$(manext)
-rm -rf $(mandir)/$(GPC_CROSS_NAME)$(manext)
pascal.bindist: pascal
tmp_base=`pwd`/tmp ; \
tmp_prefix=$${tmp_base}/$(prefix) ; \
if [ -d "$${tmp_prefix}" ]; \
then true; \
else mkdir -p "$${tmp_prefix}"; \
fi; \
$(MAKE) pascal.install prefix=$${tmp_prefix} exeext=$(exeext) HARDLINK=$(HARDLINK) && \
cd $${tmp_base} && tar cvzf ../gpc-$(gpc_version).$(target).tar.gz * && \
rm -rf $${tmp_base}
# Clean hooks:
# A lot of the ancillary files are deleted by the main makefile.
# We just have to delete files specific to us.
pascal.mostlyclean:
-rm -f p/*$(objext)
-cd p/rts; $(MAKE) -f ../../$(srcdir)/p/rts/Makefile.in mostlyclean
pascal.clean:
-rm -f xgpc
-cd p/rts; $(MAKE) -f ../../$(srcdir)/p/rts/Makefile.in clean
-if [ -d p/test ]; then cd p/test; $(MAKE) clean; fi
pascal.distclean:
-cd p/rts; $(MAKE) -f ../../$(srcdir)/p/rts/Makefile.in distclean
-if [ -d p/test ]; then cd p/test; $(MAKE) clean; fi
-rm -f p/Makefile p/gpc-config.h p/site.exp p/site.bak units/crtc.h
-rm -f p/config.cache p/config.log p/config.status
-rm -f p/testsuite/gpc.log p/testsuite/gpc.sum
-rm -f p/parse.output
-rm -f p/gpc_date p/gpc_time
-rm -f gcc-version.h
# like gcc's extraclean, which does clean p/ for us, but not p/rts.
pascal.extraclean:
-if [ -d p/test ]; then cd p/test; $(MAKE) clean; fi
-if [ -d p/test/knownbugs ]; then -cd p/test/knownbugs; $(MAKE) -f ../Makefile clean; fi
-rm -f p/*/=* p/*/"#"* p/*/*~*
-rm -f p/*/patch* p/*/*.orig p/*/*.rej
-rm -f p/*/*.dvi p/*/*.oaux p/*/*.d p/*/*.[zZ] p/*/*.gz
-rm -f p/*/*.tar p/*/*.xtar p/*/*.tar.* p/*/*.xtar.*
-rm -f p/*/*lose p/*/*.s p/*/*.s[0-9] p/*/*.i
pascal.maintainer-clean:
-cd p/rts; $(MAKE) -f ../../$(srcdir)/p/rts/Makefile.in maintainer-clean
-if [ -d p/test ]; then cd p/test; $(MAKE) clean; fi
-rm -f p/doc/gpc.info* p/gpc.*aux p/TAGS p/INSTALL p/NEWS
-rm -f p/parse.c p/parse.h
# Stage hooks:
# The main makefile has already created stage?/p.
GPCSTAGESTUFF = p/*$(objext) p/stamp-gbe p/stamp-gpc1
RTSSTAGESTUFF = p/rts/*$(objext) p/rts/*$(interfaceext) p/rts/config.cache p/rts/config.log \
p/rts/config.status p/rts/Makefile p/rts/rts-config.h
UNITSSTAGESTUFF = p/units/*$(objext) p/units/*$(interfaceext)
pascal.stage1:
-if [ -d stage1/p/rts ] ; then true ; else mkdir stage1/p/rts ; fi
-if [ -d stage1/p/units ] ; then true ; else mkdir stage1/p/units ; fi
-mv $(GPCSTAGESTUFF) stage1/p
-mv $(RTSSTAGESTUFF) stage1/p/rts
-mv $(UNITSSTAGESTUFF) stage1/p/units
pascal.stage2:
-if [ -d stage2/p/rts ] ; then true ; else mkdir stage2/p/rts ; fi
-if [ -d stage2/p/units ] ; then true ; else mkdir stage2/p/units ; fi
-mv $(GPCSTAGESTUFF) stage2/p
-mv $(RTSSTAGESTUFF) stage2/p/rts
-mv $(UNITSSTAGESTUFF) stage2/p/units
pascal.stage3:
-if [ -d stage3/p/rts ] ; then true ; else mkdir stage3/p/rts ; fi
-if [ -d stage3/p/units ] ; then true ; else mkdir stage3/p/units ; fi
-mv $(GPCSTAGESTUFF) stage3/p
-mv $(RTSSTAGESTUFF) stage3/p/rts
-mv $(UNITSSTAGESTUFF) stage3/p/units
pascal.stage4:
-if [ -d stage4/p/rts ] ; then true ; else mkdir stage4/p/rts ; fi
-if [ -d stage4/p/units ] ; then true ; else mkdir stage4/p/units ; fi
-mv $(GPCSTAGESTUFF) stage4/p
-mv $(RTSSTAGESTUFF) stage4/p/rts
-mv $(UNITSSTAGESTUFF) stage4/p/units
# Maintenance hooks:
# This target creates the files that can be rebuilt, but go in the
# distribution anyway. It then copies the files to the distdir directory.
pascal.distdir:
mkdir tmp/p
cd p ; $(MAKE) $(FLAGS_TO_PASS) $(GPC_FLAGS_TO_PASS) parse.c hash.h
cd p/doc ; $(MAKE) $(FLAGS_TO_PASS) $(GPC_FLAGS_TO_PASS) info
cd p; \
for file in *[0-9a-zA-Z+]; do \
ln $$file ../tmp/p >/dev/null 2>&1 || p $$file ../tmp/p; \
done