Skip to content

Commit

Permalink
Make our install variables etc compliant with GNU standards; fixes #1924
Browse files Browse the repository at this point in the history
  • Loading branch information
igfoo committed Aug 14, 2009
1 parent 3286819 commit 926ae90
Show file tree
Hide file tree
Showing 16 changed files with 222 additions and 251 deletions.
2 changes: 1 addition & 1 deletion configure.ac
Expand Up @@ -870,7 +870,7 @@ if grep ' ' compiler/ghc.cabal.in 2>&1 >/dev/null; then
AC_MSG_ERROR([compiler/ghc.cabal.in contains tab characters; please remove them])
fi

AC_CONFIG_FILES([mk/config.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal ghc.spec extra-gcc-opts docs/users_guide/ug-book.xml distrib/ghc.iss])
AC_CONFIG_FILES([mk/config.mk mk/install.mk mk/project.mk compiler/ghc.cabal ghc/ghc-bin.cabal ghc.spec extra-gcc-opts docs/users_guide/ug-book.xml distrib/ghc.iss])
AC_CONFIG_COMMANDS([mk/stamp-h],[echo timestamp > mk/stamp-h])
AC_OUTPUT

Expand Down
53 changes: 0 additions & 53 deletions distrib/Makefile-bin-vars.in
Expand Up @@ -7,30 +7,7 @@ FPTOOLS_TOP_ABS = @hardtop@
# rather than ghc-pkg.exe.
GHC_PKG_PROG = $(FPTOOLS_TOP_ABS)/utils/ghc-pkg/ghc-pkg.bin

# Where the different pieces of the bundle should go:
bindir = @bindir@
libdir = @libdir@/$(package)-$(version)
libexecdir = $(libdir)
datarootdir = @datarootdir@
# datadir is set to libdir here as GHC needs package.conf and unlit
# to be in the same place (and things like ghc-pkg need to agree on
# where package.conf is, so we just set it globally).
datadir = $(libdir)

platform = @TargetPlatform@
prefix = @prefix@
exec_prefix = @exec_prefix@

mandir = $(datarootdir)/man

headerdir = $(libdir)/include

# default
docdir = @datadir@/doc/ghc
htmldir = $(docdir)
psdir = $(docdir)
pdfdir = $(docdir)


PERL = @PerlCmd@
SH = /bin/sh
Expand All @@ -56,36 +33,6 @@ CPP = @CPP@

RAWCPP_FLAGS = -undef -traditional

#----------end of user-serviceable parts------------
#
#
# How to install the different pieces
#
INSTALL_DIR = $(bindist_abs_root)/utils/mkdirhier/mkdirhier
INSTALL_BIN = $(INSTALL) $(INSTALL_BIN_OPTS)
INSTALL_LIB = $(INSTALL) $(INSTALL_LIB_OPTS)
INSTALL_DATA = $(INSTALL) $(INSTALL_DATA_OPTS)
INSTALL_SCRIPT = $(INSTALL) $(INSTALL_SCRIPT_OPTS)
INSTALL_PROGRAM = $(INSTALL) $(INSTALL_PROGRAM_OPTS)
INSTALL_HEADER = $(INSTALL) $(INSTALL_HEADER_OPTS)
INSTALL_SHLIB = $(INSTALL) $(INSTALL_SHLIB_OPTS)
INSTALL_MAN = $(INSTALL) $(INSTALL_MAN_OPTS)

# What's common to all installs
INSTALL_OPTS= $(EXTRA_INSTALL_OPTS)

BIN_PERMS = 755
LIB_PERMS = 644

INSTALL_BIN_OPTS = -m $(BIN_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_BIN_OPTS)
INSTALL_LIB_OPTS = -m $(LIB_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_LIB_OPTS)
INSTALL_DATA_OPTS = -m $(LIB_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_DATA_OPTS)
INSTALL_SCRIPT_OPTS = -m $(BIN_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_SCRIPT_OPTS)
INSTALL_PROGRAM_OPTS = -m $(BIN_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_PROGRAM_OPTS)
INSTALL_HEADER_OPTS = -m $(LIB_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_HEADER_OPTS)
INSTALL_SHLIB_OPTS = -m $(BIN_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_SHLIB_OPTS)
INSTALL_MAN_OPTS = -m $(LIB_PERMS) $(INSTALL_OPTS) $(EXTRA_INSTALL_MAN_OPTS)

EXECUTABLE_FILE = chmod $(BIN_PERMS)

GHC_COMPAT_DIR=$(TOP)/mk
Expand Down
2 changes: 1 addition & 1 deletion distrib/configure-bin.ac
Expand Up @@ -167,7 +167,7 @@ dnl ** Check gcc version and flags we need to pass it **
FP_GCC_EXTRA_FLAGS

#
AC_CONFIG_FILES(extra-gcc-opts mk/config.mk)
AC_CONFIG_FILES(extra-gcc-opts mk/config.mk mk/install.mk)
AC_OUTPUT

echo "****************************************************"
Expand Down
52 changes: 30 additions & 22 deletions ghc.mk
Expand Up @@ -697,52 +697,58 @@ libraries/ghc-prim/dist-install/build/autogen/GHC/PrimopWrappers.hs: \
# Installation

install: install_packages install_libs install_libexecs install_headers \
install_libexec_scripts install_bins install_docs
install_libexec_scripts install_bins install_docs install_topdirs

install_bins: $(INSTALL_BINS)
$(INSTALL_DIR) $(DESTDIR)$(bindir)
for i in $(INSTALL_BINS); do \
$(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i $(DESTDIR)$(bindir) ; \
if test "$(darwin_TARGET_OS)" = "1"; then \
sh mk/fix_install_names.sh $(libdir) $(DESTDIR)$(bindir)/$$i ; \
sh mk/fix_install_names.sh $(ghclibdir) $(DESTDIR)$(bindir)/$$i ; \
fi ; \
done

install_libs: $(INSTALL_LIBS)
$(INSTALL_DIR) $(DESTDIR)$(libdir)
$(INSTALL_DIR) $(DESTDIR)$(ghclibdir)
for i in $(INSTALL_LIBS); do \
case $$i in \
*.a) \
$(INSTALL_DATA) $(INSTALL_OPTS) $$i $(DESTDIR)$(libdir); \
$(RANLIB) $(DESTDIR)$(libdir)/`basename $$i` ;; \
$(INSTALL_DATA) $(INSTALL_OPTS) $$i $(DESTDIR)$(ghclibdir); \
$(RANLIB) $(DESTDIR)$(ghclibdir)/`basename $$i` ;; \
*.dll) \
$(INSTALL_DATA) -s $(INSTALL_OPTS) $$i $(DESTDIR)$(libdir) ;; \
$(INSTALL_DATA) -s $(INSTALL_OPTS) $$i $(DESTDIR)$(ghclibdir) ;; \
*.so) \
$(INSTALL_SHLIB) $(INSTALL_OPTS) $$i $(DESTDIR)$(libdir) ;; \
$(INSTALL_SHLIB) $(INSTALL_OPTS) $$i $(DESTDIR)$(ghclibdir) ;; \
*.dylib) \
$(INSTALL_SHLIB) $(INSTALL_OPTS) $$i $(DESTDIR)$(libdir); \
install_name_tool -id $(DESTDIR)$(libdir)/`basename $$i` $(DESTDIR)$(libdir)/`basename $$i` ;; \
$(INSTALL_SHLIB) $(INSTALL_OPTS) $$i $(DESTDIR)$(ghclibdir); \
install_name_tool -id $(DESTDIR)$(ghclibdir)/`basename $$i` $(DESTDIR)$(ghclibdir)/`basename $$i` ;; \
*) \
$(INSTALL_DATA) $(INSTALL_OPTS) $$i $(DESTDIR)$(libdir); \
$(INSTALL_DATA) $(INSTALL_OPTS) $$i $(DESTDIR)$(ghclibdir); \
esac; \
done

install_libexec_scripts: $(INSTALL_LIBEXEC_SCRIPTS)
$(INSTALL_DIR) $(DESTDIR)$(libexecdir)
$(INSTALL_DIR) $(DESTDIR)$(ghclibexecdir)
for i in $(INSTALL_LIBEXEC_SCRIPTS); do \
$(INSTALL_SCRIPT) $(INSTALL_OPTS) $$i $(DESTDIR)$(libexecdir); \
$(INSTALL_SCRIPT) $(INSTALL_OPTS) $$i $(DESTDIR)$(ghclibexecdir); \
done

install_libexecs: $(INSTALL_LIBEXECS)
$(INSTALL_DIR) $(DESTDIR)$(libexecdir)
$(INSTALL_DIR) $(DESTDIR)$(ghclibexecdir)
for i in $(INSTALL_LIBEXECS); do \
$(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i $(DESTDIR)$(libexecdir); \
$(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i $(DESTDIR)$(ghclibexecdir); \
done

install_topdirs: $(INSTALL_TOPDIRS)
$(INSTALL_DIR) $(DESTDIR)$(topdir)
for i in $(INSTALL_TOPDIRS); do \
$(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i $(DESTDIR)$(topdir); \
done

install_headers: $(INSTALL_HEADERS)
$(INSTALL_DIR) $(DESTDIR)$(headerdir)
$(INSTALL_DIR) $(DESTDIR)$(ghcheaderdir)
for i in $(INSTALL_HEADERS); do \
$(INSTALL_HEADER) $(INSTALL_OPTS) $$i $(DESTDIR)$(headerdir); \
$(INSTALL_HEADER) $(INSTALL_OPTS) $$i $(DESTDIR)$(ghcheaderdir); \
done

install_docs: $(INSTALL_HEADERS)
Expand All @@ -760,19 +766,19 @@ install_docs: $(INSTALL_HEADERS)
$(INSTALL_DOC) $(INSTALL_OPTS) $$i/* $(DESTDIR)$(docdir)/html/`basename $$i`; \
done

INSTALLED_PACKAGE_CONF=$(DESTDIR)$(libdir)/package.conf
INSTALLED_PACKAGE_CONF=$(DESTDIR)$(topdir)/package.conf

# Install packages in the right order, so that ghc-pkg doesn't complain.
# Also, install ghc-pkg first.
ifeq "$(Windows)" "NO"
INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(libexecdir)/ghc-pkg
INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(ghclibexecdir)/ghc-pkg
else
INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(bindir)/ghc-pkg.exe
endif

install_packages: install_libexecs
install_packages: libffi/package.conf.install rts/package.conf.install
$(INSTALL_DIR) $(DESTDIR)$(libdir)
$(INSTALL_DIR) $(DESTDIR)$(topdir)
"$(RM)" $(RM_OPTS) $(INSTALLED_PACKAGE_CONF)
$(CREATE_DATA) $(INSTALLED_PACKAGE_CONF)
echo "[]" >> $(INSTALLED_PACKAGE_CONF)
Expand All @@ -783,12 +789,12 @@ install_packages: libffi/package.conf.install rts/package.conf.install
$(INSTALLED_GHC_PKG_REAL) \
$(INSTALLED_PACKAGE_CONF) \
libraries/$p dist-install \
'$(DESTDIR)' '$(prefix)' '$(libdir)' '$(docdir)/html/libraries' &&) true
'$(DESTDIR)' '$(prefix)' '$(ghclibdir)' '$(docdir)/html/libraries' &&) true
"$(GHC_CABAL_INPLACE)" install \
$(INSTALLED_GHC_PKG_REAL) \
$(INSTALLED_PACKAGE_CONF) \
compiler stage2 \
'$(DESTDIR)' '$(prefix)' '$(libdir)' '$(docdir)/html/libraries'
'$(DESTDIR)' '$(prefix)' '$(ghclibdir)' '$(docdir)/html/libraries'

# -----------------------------------------------------------------------------
# Binary distributions
Expand All @@ -810,6 +816,7 @@ $(eval $(call bindist,root1,\
$(INSTALL_HEADERS) \
$(INSTALL_LIBEXECS) \
$(INSTALL_LIBEXEC_SCRIPTS) \
$(INSTALL_TOPDIRS) \
$(INSTALL_BINS) \
$(INSTALL_DOCS) \
$(INSTALL_LIBRARY_DOCS) \
Expand All @@ -819,9 +826,10 @@ $(eval $(call bindist,root2,\
docs/index.html \
$(wildcard libraries/*/dist-install/doc/) \
$(filter-out extra-gcc-opts,$(INSTALL_LIBS)) \
$(filter-out %/project.mk,$(filter-out mk/config.mk,$(MAKEFILE_LIST))) \
$(filter-out %/project.mk mk/config.mk %/mk/install.mk,$(MAKEFILE_LIST)) \
mk/fix_install_names.sh \
mk/project.mk \
mk/install.mk.in \
bindist.mk \
libraries/dph/LICENSE \
))
Expand Down
2 changes: 1 addition & 1 deletion ghc/ghc.wrapper
@@ -1 +1 @@
exec $executablename -B$datadir ${1+"$@"}
exec $executablename -B$topdir ${1+"$@"}
149 changes: 2 additions & 147 deletions mk/config.mk.in
Expand Up @@ -12,9 +12,7 @@
# DO NOT EDIT THIS FILE!
#
# - config.mk is auto-generated from config.mk.in by configure.
# This may be triggered automatically by the build system (say
# if config.mk.in has changed more recently than config.mk),
# so if you edit config.mk your changes will be spammed.
# If you edit config.mk your changes will be spammed.
#
# - Settings in this file may be overriden by giving replacement
# definitions in build.mk. See build.mk.sample for a good
Expand All @@ -28,6 +26,7 @@
TOP = @hardtop@

include $(TOP)/mk/project.mk
include $(TOP)/mk/install.mk

################################################################################
#
Expand Down Expand Up @@ -381,150 +380,6 @@ BIN_DIST_LIST=$(TOP)/bindist-list
WINDOWS_INSTALLER_BASE = ghc-$(ProjectVersion)-i386-windows
WINDOWS_INSTALLER = $(WINDOWS_INSTALLER_BASE)$(exeext)

# Definition of installation directories, we don't use half of these, but since
# the configure script has them on offer while passing through, we might as well
# set them. Note that we have to be careful, because the GNU coding standards
# have changed a bit over the course of time, and autoconf development reflects
# this.
#
# A little bit of history regarding autoconf and GNU coding standards, use this
# as a cheat-sheet for the stuff below:
#
# variable | default < 2.60 | default >= 2.60
# ------------+--------------------+--------------------------------------
# exec_prefix | ${prefix} | ${prefix}
# libdir | ${exec_prefix}/lib | ${exec_prefix}/lib
# datarootdir | NONE! | ${prefix}/share
# datadir | ${prefix}/share | ${datarootdir}
# infodir | ${prefix}/info | ${datarootdir}/info
# mandir | ${prefix}/man | ${datarootdir}/man
# docdir | NONE! | ${datarootdir}/doc/${PACKAGE_TARNAME}
# htmldir | NONE! | ${docdir}
# dvidir | NONE! | ${docdir}
# pdfdir | NONE! | ${docdir}
# psdir | NONE! | ${docdir}
#
# NOTE: The default e.g. ${docdir} above means that autoconf substitutes the
# string "${docdir}", not the value of docdir! This is crucial for the GNU
# coding standards.

# This gets used in the default docdir when autoconf >= 2.60 is used
PACKAGE_TARNAME := @PACKAGE_TARNAME@

prefix := @prefix@

# New autoconf (>= 2.60?) make a configure with a --datarootdir=DIR flag.
# However, in order to support older autoconf's we don't use it.
# datarootdir is set lower down instead.
# But, as datadir is defined in terms of datarootdir, we also need to
# set it to the value (if any) that configure gives it here.
datarootdir := @datarootdir@

exec_prefix := @exec_prefix@
bindir := @bindir@
datadir0 := @datadir@
libdir0 := @libdir@
includedir := @includedir@
mandir := @mandir@
dynlibdir := @libdir@

ifeq "$(RelocatableBuild)" "YES"

# Hack: our directory layouts tend to be different on Windows, so
# hack around configure's bogus assumptions here.
datarootdir := $(prefix)
datadir := $(prefix)/lib
libdir := $(prefix)/lib

docdir := $(prefix)/doc
htmldir := $(docdir)
dvidir := $(docdir)
pdfdir := $(docdir)
psdir := $(docdir)

else

# Unix: override libdir and datadir to put ghc-specific stuff in
# a subdirectory with the version number included.
#
# datadir is set to libdir here as GHC needs package.conf and unlit
# to be in the same place (and things like ghc-pkg need to agree on
# where package.conf is, so we just set it globally).
#
datarootdir := $(datadir0)
libdir := $(libdir0)/ghc-$(ProjectVersion)
datadir := $(libdir)

# New autoconf (>= 2.60?) make a configure with --docdir=DIR etc flags.
# However, in order to support older autoconf's we don't use them.

#docdir := @docdir@
#htmldir := @htmldir@
#dvidir := @dvidir@
#pdfdir := @pdfdir@
#psdir := @psdir@

docdir := $(datarootdir)/doc/ghc
htmldir := $(docdir)
dvidir := $(docdir)
pdfdir := $(docdir)
psdir := $(docdir)

endif # Windows

headerdir := $(libdir)/include

# Default place for putting interface files is $(libdir)
# (overriden for packages in package.mk)
ifacedir = $(libdir)

# NOTE: by intention, libexecdir and libdir point to
# the same place.
# => Only way to override this is to set libexecdir= on the command line.
# (NOTE: configure script setting is ignored).
libexecdir = $(libdir)

#-----------------------------------------------------------------------------
# install configuration

#
# Set this to have files installed with a specific owner
#
INSTALL_OWNER =

#
# Set this to have files installed with a specific group
#
INSTALL_GROUP =

#
# Invocations of `install' for the four different classes
# of targets:
#
CREATE_SCRIPT = create () { touch $$1 && chmod 755 $$1 ; } && create
CREATE_DATA = create () { touch $$1 && chmod 644 $$1 ; } && create
INSTALL_PROGRAM = $(INSTALL) -m 755
INSTALL_SCRIPT = $(INSTALL) -m 755
INSTALL_SHLIB = $(INSTALL) -m 755
INSTALL_DATA = $(INSTALL) -m 644
INSTALL_HEADER = $(INSTALL) -m 644
INSTALL_MAN = $(INSTALL) -m 644
INSTALL_DOC = $(INSTALL) -m 644
INSTALL_DIR = $(INSTALL) -m 755 -d

#
# runhaskell and hsc2hs are special, in that other compilers besides
# GHC might provide them. Systems with a package manager often come
# with tools to manage this kind of clash, e.g. RPM's
# update-alternatives. When building a distribution for such a system,
# we recommend setting both of the following to 'YES'.
#
# NO_INSTALL_RUNHASKELL = YES
# NO_INSTALL_HSC2HS = YES
#
# NB. we use negative tests here because for binary-distributions we cannot
# test build-time variables at install-time, so they must default to on.

# -----------------------------------------------------------------------------
# Utilities programs: flags

Expand Down

0 comments on commit 926ae90

Please sign in to comment.