ghc.mk 53.7 KB
Newer Older
1 2
# -----------------------------------------------------------------------------
#
3
# (c) 2009-2013 The University of Glasgow
4 5 6 7
#
# This file is part of the GHC build system.
#
# To understand how the build system works and how to modify it, see
8 9
#      http://ghc.haskell.org/trac/ghc/wiki/Building/Architecture
#      http://ghc.haskell.org/trac/ghc/wiki/Building/Modifying
10 11 12
#
# -----------------------------------------------------------------------------

Ian Lynagh's avatar
Ian Lynagh committed
13 14 15
# ToDo List.
#
#   * remove old Makefiles, add new stubs for building in subdirs
Simon Marlow's avatar
Simon Marlow committed
16 17 18 19 20 21 22
#     * docs/Makefile
#     * docs/docbook-cheat-sheet/Makefile
#     * docs/man/Makefile
#     * docs/storage-mgmt/Makefile
#     * docs/vh/Makefile
#     * rts/dotnet/Makefile
#     * utils/Makefile
Ian Lynagh's avatar
Ian Lynagh committed
23 24 25 26 27 28 29 30 31 32 33
#   * add Makefiles for the rest of the utils/ programs that aren't built
#     by default (need to exclude them from 'make all' too)

# Possible cleanups:
#
#   * per-source-file dependencies instead of one .depend file?
#   * eliminate undefined variables, and use --warn-undefined-variables?
#   * put outputs from different ways in different subdirs of distdir/build,
#     then we don't have to use -osuf/-hisuf.  We would have to install
#     them in different places too, so we'd need ghc-pkg support for packages
#     of different ways.
34
#   * make PACKAGES_STAGE1 generated by './configure' or './boot'?
Ian Lynagh's avatar
Ian Lynagh committed
35 36 37 38 39 40
#   * we should use a directory of package.conf files rather than a single
#     file for the inplace package database, so that we can express
#     dependencies more accurately.  Otherwise it's possible to get into
#     a state where the package database is out of date, and the build
#     system doesn't know.

Simon Marlow's avatar
Simon Marlow committed
41 42 43 44
# Approximate build order.
#
# The actual build order is defined by dependencies, and the phase
# ordering used to ensure correct ordering of makefile-generation; see
45
#    http://ghc.haskell.org/trac/ghc/wiki/Building/Architecture/Idiom/PhaseOrdering
Ian Lynagh's avatar
Ian Lynagh committed
46 47 48
#
#     * With bootstrapping compiler:
#           o Build utils/ghc-cabal
Simon Marlow's avatar
Simon Marlow committed
49
#           o Build utils/ghc-pkg
Ian Lynagh's avatar
Ian Lynagh committed
50
#           o Build utils/hsc2hs
51 52
#           o Build utils/genprimopcode
#           o Build utils/deriveConstants
Ian Lynagh's avatar
Ian Lynagh committed
53
#     * For each package:
thomie's avatar
thomie committed
54
#	    o configure, generate package-data.mk and inplace-pkg-config
Ian Lynagh's avatar
Ian Lynagh committed
55
#           o register each package into inplace/lib/package.conf
56
#     * build libffi (if not disabled by --with-system-libffi)
Simon Marlow's avatar
Simon Marlow committed
57
#     * With bootstrapping compiler:
58
#	    o Build libraries/{filepath,hpc,Cabal}
Simon Marlow's avatar
Simon Marlow committed
59
#           o Build compiler (stage 1)
thomie's avatar
thomie committed
60
#     * With stage 1 compiler:
Ian Lynagh's avatar
Ian Lynagh committed
61
#           o Build libraries/*
Simon Marlow's avatar
Simon Marlow committed
62
#	    o Build rts
Ian Lynagh's avatar
Ian Lynagh committed
63 64
#           o Build utils/* (except haddock)
#           o Build compiler (stage 2)
thomie's avatar
thomie committed
65
#     * With stage 2 compiler:
Ian Lynagh's avatar
Ian Lynagh committed
66
#           o Build utils/haddock
Simon Marlow's avatar
Simon Marlow committed
67
#           o Build compiler (stage 3) (optional)
Ian Lynagh's avatar
Ian Lynagh committed
68 69 70 71
#     * With haddock:
#           o libraries/*
#           o compiler

72 73
.PHONY: default all haddock

74 75
# We need second expansion for the way we handle directories, so that
#     | $$$$(dir $$$$@)/.
Ian Lynagh's avatar
Ian Lynagh committed
76
# expands to the directory of a rule that uses a % pattern.
77 78
.SECONDEXPANSION:

Ian Lynagh's avatar
Ian Lynagh committed
79 80
default : all

81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97

##################################################
# Check that we have a new enough 'make'

HAVE_EVAL := NO
$(eval HAVE_EVAL := YES)

ifeq "$(HAVE_EVAL)" "NO"
$(error Your make does not support eval. You need GNU make >= 3.81)
endif

ifeq "$(abspath /)" ""
$(error Your make does not support abspath. You need GNU make >= 3.81)
endif
##################################################


98 99 100 101
# Catch make if it runs away into an infinite loop
ifeq      "$(MAKE_RESTARTS)" ""
else ifeq "$(MAKE_RESTARTS)" "1"
else
102
$(error Make has restarted itself $(MAKE_RESTARTS) times; is there a makefile bug? See http://ghc.haskell.org/trac/ghc/wiki/Building/Troubleshooting#Makehasrestarteditself3timesisthereamakefilebug for details)
103 104
endif

Ian Lynagh's avatar
Ian Lynagh committed
105 106 107 108 109 110 111 112
# -----------------------------------------------------------------------------
# Misc GNU make utils

nothing=
space=$(nothing) $(nothing)
comma=,

# -----------------------------------------------------------------------------
113 114
# Makefile debugging
#
Ian Lynagh's avatar
Ian Lynagh committed
115 116 117 118 119 120 121
# to see the effective value used for a Makefile variable, do
#  make show VALUE=MY_VALUE
#

show:
	@echo '$(VALUE)="$($(VALUE))"'

122 123 124 125 126 127 128 129
# echo is used by the nightly builders to query the build system for
# information.
# Using printf means that we don't get a trailing newline. We escape
# backslashes and double quotes in the string to protect them from the
# shell, and percent signs to protect them from printf.
echo:
	@printf "$(subst %,%%,$(subst ",\",$(subst \,\\\\,$($(VALUE)))))"

Ian Lynagh's avatar
Ian Lynagh committed
130 131 132
# -----------------------------------------------------------------------------
# Include subsidiary build-system bits

133 134
include mk/tree.mk

135
ifneq "$(CLEANING)" "YES"
Ian Lynagh's avatar
Ian Lynagh committed
136 137 138 139
include mk/config.mk
ifeq "$(ProjectVersion)" ""
$(error Please run ./configure first)
endif
140
endif
Ian Lynagh's avatar
Ian Lynagh committed
141

142
include mk/ways.mk
143
include mk/warnings.mk
144

Ian Lynagh's avatar
Ian Lynagh committed
145 146
# (Optional) build-specific configuration
include mk/custom-settings.mk
147 148
SRC_CC_OPTS     += $(WERROR)
SRC_HC_OPTS     += $(WERROR)
Ian Lynagh's avatar
Ian Lynagh committed
149

150
ifneq "$(CLEANING)" "YES"
151
ifeq "$(DYNAMIC_GHC_PROGRAMS)" "YES"
152
ifeq "$(findstring dyn,$(GhcLibWays))" ""
153
$(error dyn is not in $$(GhcLibWays), but $$(DYNAMIC_GHC_PROGRAMS) is YES)
154 155 156
endif
else
ifeq "$(findstring v,$(GhcLibWays))" ""
157
$(error v is not in $$(GhcLibWays), and $$(DYNAMIC_GHC_PROGRAMS) is not YES)
158
endif
Ian Lynagh's avatar
Ian Lynagh committed
159
endif
160 161 162 163 164
ifeq "$(GhcProfiled)" "YES"
ifeq "$(findstring p,$(GhcLibWays))" ""
$(error p is not in $$(GhcLibWays), and $$(GhcProfiled) is YES)
endif
endif
165
endif
Ian Lynagh's avatar
Ian Lynagh committed
166

167 168 169 170
ifeq "$(phase)" ""
phase = final
endif

171 172 173
# -----------------------------------------------------------------------------
# Utility definitions

174
include rules/prof.mk
175
include rules/trace.mk
176
include rules/library-path.mk
177
include rules/add-dependency.mk
178
include rules/make-command.mk
179
include rules/pretty_commands.mk
180

Ian Lynagh's avatar
Ian Lynagh committed
181 182 183 184 185 186 187 188 189
# -----------------------------------------------------------------------------
# Macros for standard targets

include rules/all-target.mk
include rules/clean-target.mk

# -----------------------------------------------------------------------------
# The inplace tree

190
$(eval $(call clean-target,root,inplace,inplace/bin inplace/lib))
Ian Lynagh's avatar
Ian Lynagh committed
191 192 193 194 195 196 197

# -----------------------------------------------------------------------------
# Whether to build dependencies or not

# When we're just doing 'make clean' or 'make show', then we don't need
# to build dependencies.

198
ifeq "$(CLEANING)" "YES"
Ian Lynagh's avatar
Ian Lynagh committed
199 200 201
NO_INCLUDE_DEPS = YES
NO_INCLUDE_PKGDATA = YES
endif
Ian Lynagh's avatar
Ian Lynagh committed
202 203 204 205
ifneq "$(findstring bootstrapping-files,$(MAKECMDGOALS))" ""
NO_INCLUDE_DEPS = YES
NO_INCLUDE_PKGDATA = YES
endif
Ian Lynagh's avatar
Ian Lynagh committed
206 207 208 209 210 211 212 213 214 215 216 217 218
ifeq "$(findstring show,$(MAKECMDGOALS))" "show"
NO_INCLUDE_DEPS = YES
# We want package-data.mk for show
endif

# -----------------------------------------------------------------------------
# Ways

include rules/way-prelims.mk

$(foreach way,$(ALL_WAYS),\
  $(eval $(call way-prelims,$(way))))

219
ifeq "$(DYNAMIC_GHC_PROGRAMS)" "YES"
220
GHCI_WAY = dyn
221
HADDOCK_WAY = dyn
222 223
else
GHCI_WAY = v
224
HADDOCK_WAY = v
225 226
endif

227 228 229 230 231 232 233
WINDOWS_DYN_PROG_RTS := rts
ifeq "$(GhcThreaded)" "YES"
WINDOWS_DYN_PROG_RTS := $(WINDOWS_DYN_PROG_RTS)_thr
endif
ifeq "$(GhcDebugged)" "YES"
WINDOWS_DYN_PROG_RTS := $(WINDOWS_DYN_PROG_RTS)_debug
endif
234
WINDOWS_DYN_PROG_RTS := $(WINDOWS_DYN_PROG_RTS)_dyn_LIB_FILE
235

Ian Lynagh's avatar
Ian Lynagh committed
236 237 238
# -----------------------------------------------------------------------------
# Compilation Flags

239
include rules/distdir-opts.mk
Ian Lynagh's avatar
Ian Lynagh committed
240 241 242 243 244 245 246 247 248 249
include rules/distdir-way-opts.mk

# -----------------------------------------------------------------------------
# Finding source files and object files

include rules/hs-sources.mk
include rules/c-sources.mk
include rules/includes-sources.mk
include rules/hs-objs.mk
include rules/c-objs.mk
250
include rules/cmm-objs.mk
Ian Lynagh's avatar
Ian Lynagh committed
251 252 253 254

# -----------------------------------------------------------------------------
# Suffix rules

255 256 257
# Suffix rules cause "make clean" to fail on Windows (trac #3233)
# so we don't make any when cleaning.
ifneq "$(CLEANING)" "YES"
258
include rules/hs-suffix-rules-srcdir.mk
259
include rules/hs-suffix-way-rules-srcdir.mk
260
include rules/hs-suffix-way-rules.mk
Ian Lynagh's avatar
Ian Lynagh committed
261 262
include rules/hi-rule.mk
include rules/c-suffix-rules.mk
263
include rules/cmm-suffix-rules.mk
thomie's avatar
thomie committed
264
endif
265

Ian Lynagh's avatar
Ian Lynagh committed
266 267 268 269 270 271 272 273
# -----------------------------------------------------------------------------
# Building package-data.mk files from .cabal files

include rules/package-config.mk

# -----------------------------------------------------------------------------
# Building dependencies

274
include rules/dependencies.mk
Ian Lynagh's avatar
Ian Lynagh committed
275
include rules/build-dependencies.mk
276
include rules/include-dependencies.mk
Ian Lynagh's avatar
Ian Lynagh committed
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299

# -----------------------------------------------------------------------------
# Build package-data.mk files

include rules/build-package-data.mk

# -----------------------------------------------------------------------------
# Build and install a program

include rules/build-prog.mk
include rules/shell-wrapper.mk

# -----------------------------------------------------------------------------
# Build a perl script

include rules/build-perl.mk

# -----------------------------------------------------------------------------
# Build a package

include rules/build-package.mk
include rules/build-package-way.mk
include rules/haddock.mk
300
include rules/tags-package.mk
301
include rules/foreachLibrary.mk
Ian Lynagh's avatar
Ian Lynagh committed
302 303

# -----------------------------------------------------------------------------
Ian Lynagh's avatar
Ian Lynagh committed
304
# Registering hand-written package descriptions (used in rts)
Ian Lynagh's avatar
Ian Lynagh committed
305 306 307 308 309 310 311 312 313

include rules/manual-package-config.mk

# -----------------------------------------------------------------------------
# Docs

include rules/docbook.mk

# -----------------------------------------------------------------------------
314
# Making bindists and sdists
Ian Lynagh's avatar
Ian Lynagh committed
315 316

include rules/bindist.mk
317
include rules/sdist-ghc-file.mk
Ian Lynagh's avatar
Ian Lynagh committed
318 319

# -----------------------------------------------------------------------------
320 321 322 323 324 325 326 327 328 329 330 331
# Directories

# Don't try to delete directories:
.PRECIOUS: %/.

# Create build directories on demand.  NB. the | below: this indicates
# that $(MKDIRHIER) is an order-only dependency, which means that this
# rule fires after building mkdirhier, but we won't try to recreate
# directories if mkdirhier changes.
%/. : | $(MKDIRHIER)
	"$(MKDIRHIER)" $@

332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350
# -----------------------------------------------------------------------------
# Lax dependencies

ifeq "$(LAX_DEPENDENCIES)" "YES"
LAX_DEPS_FOLLOW = |
else
LAX_DEPS_FOLLOW =
endif

# This is a bit of a hack. When LAX_DEPS_FOLLOW is | some rules end up
# looking like
#     target: a | b | c
# The first | signals the start of the order-only dependencies, but make
# treats the second | as a dependency. So we need to tell make how to
# build that dependency.

.PHONY: |
| :
	@:
351

352
# -----------------------------------------------------------------------------
353 354 355
# Packages to build
# The lists of packages that we *actually* going to build in each stage:
#
rodlogic's avatar
rodlogic committed
356
#  $(PACKAGES_STAGE0)
357 358 359 360 361
#  $(PACKAGES_STAGE1)
#  $(PACKAGES_STAGE2)
#
# Note that we need to add them to these variables in dependency
# order, as this is the order that they get configured in.
362

363
ifeq "$(CLEANING)" "YES"
364

365 366 367 368 369 370 371 372
define addLibraryForCleaning
# We just add all packages to both the stage 0 and stage 1 lists.
# Stage 2 gets cleaned in the same way as stage 1, so no need to
# add it there.
PACKAGES_STAGE0 += $1
PACKAGES_STAGE1 += $1
endef
$(eval $(call foreachLibrary,addLibraryForCleaning))
373

374
else # CLEANING
375

376 377 378 379
# Packages that are built by stage0. These packages are dependencies of
# programs such as GHC and ghc-pkg, that we do not assume the stage0
# compiler already has installed (or up-to-date enough).

380
PACKAGES_STAGE0 = binary Cabal/Cabal hpc bin-package-db hoopl transformers template-haskell
381
ifeq "$(Windows_Host)" "NO"
382
ifneq "$(HostOS_CPP)" "ios"
383
PACKAGES_STAGE0 += terminfo
384
endif
385
endif
386

387 388 389 390 391 392 393 394
PACKAGES_STAGE1 += ghc-prim
PACKAGES_STAGE1 += $(INTEGER_LIBRARY)
PACKAGES_STAGE1 += base
PACKAGES_STAGE1 += filepath
PACKAGES_STAGE1 += array
PACKAGES_STAGE1 += deepseq
PACKAGES_STAGE1 += bytestring
PACKAGES_STAGE1 += containers
395

396
ifeq "$(Windows_Host)" "YES"
397 398 399
PACKAGES_STAGE1 += Win32
endif
PACKAGES_STAGE1 += time
400
ifeq "$(Windows_Host)" "NO"
401
PACKAGES_STAGE1 += unix
402
endif
403

404 405 406 407 408 409
PACKAGES_STAGE1 += directory
PACKAGES_STAGE1 += process
PACKAGES_STAGE1 += hpc
PACKAGES_STAGE1 += pretty
PACKAGES_STAGE1 += template-haskell
PACKAGES_STAGE1 += binary
410
PACKAGES_STAGE1 += Cabal/Cabal
411 412 413
PACKAGES_STAGE1 += bin-package-db
PACKAGES_STAGE1 += hoopl
PACKAGES_STAGE1 += transformers
414

415
ifeq "$(HADDOCK_DOCS)" "YES"
416
PACKAGES_STAGE1 += xhtml
417 418
endif

419 420
ifeq "$(Windows_Target)" "NO"
ifneq "$(TargetOS_CPP)" "ios"
421 422
PACKAGES_STAGE1 += terminfo
endif
423
endif
424 425
PACKAGES_STAGE1 += haskeline

426 427 428
# See Note [No stage2 packages when CrossCompiling or Stage1Only].
# See Note [Stage1Only vs stage=1] in mk/config.mk.in.
ifeq "$(CrossCompiling) $(Stage1Only)" "NO NO"
429 430 431
define addExtraPackage
ifeq "$2" "-"
# Do nothing; this package is already handled above
432
else ifeq "$2" "dph"
433 434 435 436 437 438
ifeq "$$(BUILD_DPH) $$(GhcProfiled)" "YES NO"
# The DPH packages need TH, which is incompatible with a profiled GHC.
PACKAGES_STAGE2 += $1
endif
else ifeq "$2" "extra"
ifeq "$$(BUILD_EXTRA_PKGS)" "YES"
439 440
PACKAGES_STAGE2 += $1
endif
441
else
442
$$(error Unknown package tag: $2)
443
endif
444
endef
445 446
$(eval $(call foreachLibrary,addExtraPackage))
endif
447

448 449
# We install all packages that we build.
INSTALL_PACKAGES := $(addprefix libraries/,$(PACKAGES_STAGE1))
450
# See Note [Stage1Only vs stage=1] in mk/config.mk.in.
451
ifneq "$(Stage1Only)" "YES"
452
INSTALL_PACKAGES += compiler
453
endif
454
INSTALL_PACKAGES += $(addprefix libraries/,$(PACKAGES_STAGE2))
455

456
endif # CLEANING
457

458
# -------------------------------------------
459
# Note [Dependencies between package-data.mk files].
Ian Lynagh's avatar
Ian Lynagh committed
460 461 462

# We cannot run ghc-cabal to configure a package until we have
# configured and registered all of its dependencies.  So the following
463 464
# hack forces all the configure steps to happen in exactly the following order:
#
465
#  $(PACKAGES_STAGE1) ghc(stage2) $(PACKAGES_STAGE2)
466 467 468
#
# Ideally we should use the correct dependencies here to allow more
# parallelism, but we don't know the dependencies until we've
Gabor Greif's avatar
Gabor Greif committed
469
# generated the package-data.mk files.
Ian Lynagh's avatar
Ian Lynagh committed
470
define fixed_pkg_dep
471
libraries/$1/$2/package-data.mk : $$(fixed_pkg_prev)
472
fixed_pkg_prev:=libraries/$1/$2/package-data.mk
Ian Lynagh's avatar
Ian Lynagh committed
473 474 475 476
endef

ifneq "$(BINDIST)" "YES"
fixed_pkg_prev=
477
$(foreach pkg,$(PACKAGES_STAGE1),$(eval $(call fixed_pkg_dep,$(pkg),dist-install)))
478

479 480 481 482 483 484 485 486 487 488 489 490 491
# Intermezzo: utils that we build with the stage1 compiler. They depend on
# the stage1 packages, so we have to make sure those packages get configured
# and registered before we can start with these. Note that they don't depend on
# eachother, so we can configure them in parallel.
utils/ghc-pwd/dist-install/package-data.mk: $(fixed_pkg_prev)
utils/ghc-cabal/dist-install/package-data.mk: $(fixed_pkg_prev)
utils/dll-split/dist-install/package-data.mk: $(fixed_pkg_prev)
utils/hpc/dist-install/package-data.mk: $(fixed_pkg_prev)
utils/ghc-pkg/dist-install/package-data.mk: $(fixed_pkg_prev)
utils/hsc2hs/dist-install/package-data.mk: $(fixed_pkg_prev)
utils/compare_sizes/dist-install/package-data.mk: $(fixed_pkg_prev)
utils/runghc/dist-install/package-data.mk: $(fixed_pkg_prev)

492 493 494 495
# the GHC package doesn't live in libraries/, so we add its dependency manually:
compiler/stage2/package-data.mk: $(fixed_pkg_prev)

# and continue with PACKAGES_STAGE2, which depend on GHC:
496
fixed_pkg_prev:=compiler/stage2/package-data.mk
497
$(foreach pkg,$(PACKAGES_STAGE2),$(eval $(call fixed_pkg_dep,$(pkg),dist-install)))
Ian Lynagh's avatar
Ian Lynagh committed
498

499 500
ghc/stage1/package-data.mk: compiler/stage1/package-data.mk
ghc/stage2/package-data.mk: compiler/stage2/package-data.mk
Ian Lynagh's avatar
Ian Lynagh committed
501

502 503 504 505 506
# Utils that we build with the stage2 compiler.
# They depend on the ghc library and some other libraries, but depending on
# the ghc library's package-data.mk is sufficient, as that in turn depends on
# all the other libraries' package-data.mk files.
utils/haddock/dist/package-data.mk: compiler/stage2/package-data.mk
Ian Lynagh's avatar
Ian Lynagh committed
507
utils/ghctags/dist-install/package-data.mk: compiler/stage2/package-data.mk
508
utils/mkUserGuidePart/dist/package-data.mk: compiler/stage2/package-data.mk
Ian Lynagh's avatar
Ian Lynagh committed
509

Ian Lynagh's avatar
Ian Lynagh committed
510
# add the final package.conf dependency: ghc-prim depends on RTS
511
libraries/ghc-prim/dist-install/package-data.mk : rts/dist/package.conf.inplace
Ian Lynagh's avatar
Ian Lynagh committed
512 513
endif

514 515
# --------------------------------
# Misc package-related settings
516

ian@well-typed.com's avatar
ian@well-typed.com committed
517 518 519 520 521
# Run Haddock for the packages that will be installed. We need to handle
# compiler specially due to the different dist directory name.
$(foreach p,$(INSTALL_PACKAGES),$(eval $p_dist-install_DO_HADDOCK = YES))
compiler_stage2_DO_HADDOCK = YES

522
BOOT_PKG_CONSTRAINTS := \
523
    $(foreach d,$(PACKAGES_STAGE0),\
524 525
        $(foreach p,$(basename $(notdir $(wildcard libraries/$d/*.cabal))),\
            --constraint "$p == $(shell grep -i "^Version:" libraries/$d/$p.cabal | sed "s/[^0-9.]//g")"))
Simon Marlow's avatar
Simon Marlow committed
526

527
# The actual .a and .so/.dll files: needed for dependencies.
528
ALL_STAGE1_LIBS  = $(foreach lib,$(PACKAGES_STAGE1),$(libraries/$(lib)_dist-install_v_LIB))
529
ifeq "$(BuildSharedLibs)" "YES"
530
ALL_STAGE1_LIBS += $(foreach lib,$(PACKAGES_STAGE1),$(libraries/$(lib)_dist-install_dyn_LIB))
531
endif
532
BOOT_LIBS = $(foreach lib,$(PACKAGES_STAGE0),$(libraries/$(lib)_dist-boot_v_LIB))
533

534
# ----------------------------------------
Ian Lynagh's avatar
Ian Lynagh committed
535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551
# Special magic for the ghc-prim package

# We want the ghc-prim package to include the GHC.Prim module when it
# is registered, but not when it is built, because GHC.Prim is not a
# real source module, it is built-in to GHC.  The old build system did
# this using Setup.hs, but we can't do that here, so we have a flag to
# enable GHC.Prim in the .cabal file (so that the ghc-prim package
# remains compatible with the old build system for the time being).
# GHC.Prim module in the ghc-prim package with a flag:
#
libraries/ghc-prim_CONFIGURE_OPTS += --flag=include-ghc-prim

# And then we strip it out again before building the package:
define libraries/ghc-prim_PACKAGE_MAGIC
libraries/ghc-prim_dist-install_MODULES := $$(filter-out GHC.Prim,$$(libraries/ghc-prim_dist-install_MODULES))
endef

552
PRIMOPS_TXT_STAGE1 = compiler/stage1/build/primops.txt
Ian Lynagh's avatar
Ian Lynagh committed
553

554 555
libraries/ghc-prim/dist-install/build/GHC/PrimopWrappers.hs : $$(genprimopcode_INPLACE) $(PRIMOPS_TXT_STAGE1) | $$(dir $$@)/.
	"$(genprimopcode_INPLACE)" --make-haskell-wrappers < $(PRIMOPS_TXT_STAGE1) >$@
Ian Lynagh's avatar
Ian Lynagh committed
556

557 558
# Required so that Haddock documents the primops.
libraries/ghc-prim_dist-install_EXTRA_HADDOCK_SRCS = libraries/ghc-prim/dist-install/build/autogen/GHC/Prim.hs
Ian Lynagh's avatar
Ian Lynagh committed
559

560 561 562 563 564
# ----------------------------------------
# Special magic for the integer package

ifneq "$(CLEANING)" "YES"
ifeq "$(INTEGER_LIBRARY)" "integer-gmp"
565
libraries/base_dist-install_CONFIGURE_OPTS += --flags=integer-gmp
Ian Lynagh's avatar
Ian Lynagh committed
566 567
else ifeq "$(INTEGER_LIBRARY)" "integer-simple"
libraries/base_dist-install_CONFIGURE_OPTS += --flags=integer-simple
568 569 570 571 572
else
$(error Unknown integer library: $(INTEGER_LIBRARY))
endif
endif

Ian Lynagh's avatar
Ian Lynagh committed
573 574
# -----------------------------------------------------------------------------
# Include build instructions from all subdirs
575 576
BUILD_DIRS += utils/mkdirhier
BUILD_DIRS += utils/touchy
577
BUILD_DIRS += utils/unlit
578
BUILD_DIRS += utils/hp2ps
579
BUILD_DIRS += driver/split
580
BUILD_DIRS += utils/genprimopcode
581
BUILD_DIRS += driver
582
BUILD_DIRS += driver/ghci
583 584 585
BUILD_DIRS += driver/ghc
BUILD_DIRS += driver/haddock
BUILD_DIRS += libffi
586
BUILD_DIRS += utils/deriveConstants
587 588
BUILD_DIRS += includes
BUILD_DIRS += rts
rodlogic's avatar
rodlogic committed
589
BUILD_DIRS += bindisttest
590
BUILD_DIRS += utils/genapply
Ian Lynagh's avatar
Ian Lynagh committed
591

592 593 594 595
# When cleaning, don't add any library packages to BUILD_DIRS. We include
# ghc.mk files for all BUILD_DIRS, but they don't exist until after running
# `./boot`. Running `make clean` before anything else, as well as running
# `make maintainer-clean` twice, should work.
596
ifneq "$(CLEANING)" "YES"
597 598 599 600 601 602
# These are deliberately in reverse order, so as to ensure that
# there is no need to have them in dependency order. That's important
# because it's tricky to ensure that they are in dependency order when
# cross-compiling, as some packages may only be in PACKAGES_STAGE0
# or PACKAGES_STAGE1.
BUILD_DIRS += $(patsubst %, libraries/%, $(PACKAGES_STAGE2))
603
BUILD_DIRS += $(patsubst %, libraries/%, $(PACKAGES_STAGE1))
ian@well-typed.com's avatar
ian@well-typed.com committed
604
BUILD_DIRS += $(patsubst %, libraries/%, $(filter-out $(PACKAGES_STAGE1),$(PACKAGES_STAGE0)))
605
ifeq "$(BUILD_DPH)" "YES"
606 607 608 609
# Note: `$(eval $(call foreachLibrary,addExtraPackage))` above adds the
# packages listed in `libraries/dph/ghc-packages` (e.g. dph-base) to
# PACKAGES_STAGE2. But not 'libraries/dph' itself (it doesn't have a cabal
# file). Since it does have a ghc.mk file, we add it to BUILD_DIRS here.
610
BUILD_DIRS += $(wildcard libraries/dph)
611
endif
612
endif
613

Ian Lynagh's avatar
Ian Lynagh committed
614
BUILD_DIRS += libraries/integer-gmp/gmp
615 616
BUILD_DIRS += utils/haddock
BUILD_DIRS += utils/haddock/doc
617
BUILD_DIRS += compiler
618 619
BUILD_DIRS += utils/hsc2hs
BUILD_DIRS += utils/ghc-pkg
620
BUILD_DIRS += utils/testremove
621
BUILD_DIRS += utils/ghctags
622
BUILD_DIRS += utils/dll-split
623
BUILD_DIRS += utils/ghc-pwd
624
BUILD_DIRS += utils/ghc-cabal
625
BUILD_DIRS += utils/hpc
626
BUILD_DIRS += utils/runghc
627 628
BUILD_DIRS += ghc
BUILD_DIRS += utils/mkUserGuidePart
629 630
BUILD_DIRS += docs/users_guide
BUILD_DIRS += docs/man
631 632 633
BUILD_DIRS += utils/count_lines
BUILD_DIRS += utils/compare_sizes

Ian Lynagh's avatar
Ian Lynagh committed
634
# ----------------------------------------------
635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678
# Actually include the sub-ghc.mk's

ifeq "$(CLEANING)" "YES"
# Don't exclude any BUILD_DIRS when cleaning. When you for example build
# haddock once, but later set HADDOCK_DOCS back to NO, then 'make clean'
# should still clean the haddock directory.
else # CLEANING
ifeq "$(BINDIST)" "YES"
BUILD_DIRS := $(filter-out utils/mkdirhier,$(BUILD_DIRS))
BUILD_DIRS := $(filter-out utils/genprimopcode,$(BUILD_DIRS))
BUILD_DIRS := $(filter-out bindisttest,$(BUILD_DIRS))
BUILD_DIRS := $(filter-out utils/genapply,$(BUILD_DIRS))
BUILD_DIRS := $(filter-out utils/mkUserGuidePart,$(BUILD_DIRS))
endif
ifeq "$(HADDOCK_DOCS)" "NO"
BUILD_DIRS := $(filter-out utils/haddock,$(BUILD_DIRS))
BUILD_DIRS := $(filter-out utils/haddock/doc,$(BUILD_DIRS))
endif
ifeq "$(BUILD_DOCBOOK_HTML) $(BUILD_DOCBOOK_PS) $(BUILD_DOCBOOK_PDF)" "NO NO NO"
# Don't to build this little utility if we're not building the User's Guide.
BUILD_DIRS := $(filter-out utils/mkUserGuidePart,$(BUILD_DIRS))
endif
ifeq "$(Windows_Host)" "NO"
BUILD_DIRS := $(filter-out utils/touchy,$(BUILD_DIRS))
endif
ifeq "$(GhcUnregisterised)" "YES"
BUILD_DIRS := $(filter-out driver/split,$(BUILD_DIRS))
endif
ifeq "$(GhcWithInterpreter)" "NO"
# runghc is just GHCi in disguise
BUILD_DIRS := $(filter-out utils/runghc,$(BUILD_DIRS))
endif
ifneq "$(INTEGER_LIBRARY)" "integer-gmp"
BUILD_DIRS := $(filter-out libraries/integer-gmp/gmp,$(BUILD_DIRS))
endif
ifneq "$(CrossCompiling) $(Stage1Only)" "NO NO"
# See Note [No stage2 packages when CrossCompiling or Stage1Only].
# See Note [Stage1Only vs stage=1] in mk/config.mk.in.
BUILD_DIRS := $(filter-out utils/haddock,$(BUILD_DIRS))
BUILD_DIRS := $(filter-out utils/haddock/doc,$(BUILD_DIRS))
BUILD_DIRS := $(filter-out utils/ghctags,$(BUILD_DIRS))
BUILD_DIRS := $(filter-out utils/mkUserGuidePart,$(BUILD_DIRS))
endif
endif # CLEANING
Ian Lynagh's avatar
Ian Lynagh committed
679

680
include $(patsubst %, %/ghc.mk, $(BUILD_DIRS))
Ian Lynagh's avatar
Ian Lynagh committed
681

Simon Marlow's avatar
Simon Marlow committed
682 683 684 685 686
# A useful pseudo-target (must be after the include above, because it needs
# the value of things like $(libraries/base_dist-install_v_LIB).
.PHONY: stage1_libs
stage1_libs : $(ALL_STAGE1_LIBS)

687 688
# ----------------------------------------------
# Per-package compiler flags
rodlogic's avatar
rodlogic committed
689
#
690
# If you want to add per-package compiler flags, see `mk/warnings.mk`.
691

692
# Add $(GhcLib(Extra)HcOpts) to all package builds
693
$(foreach pkg,$(PACKAGES_STAGE1) $(PACKAGES_STAGE2),$(eval libraries/$(pkg)_dist-install_HC_OPTS += $$(GhcLibHcOpts)))
694
$(foreach pkg,$(PACKAGES_STAGE1) $(PACKAGES_STAGE2),$(eval libraries/$(pkg)_dist-install_EXTRA_HC_OPTS += $$(GhcLibExtraHcOpts)))
695

696
# Add $(GhcBootLib(Extra)HcOpts) to all stage0 package builds
697
$(foreach pkg,$(PACKAGES_STAGE0),$(eval libraries/$(pkg)_dist-boot_HC_OPTS += $$(GhcBootLibHcOpts)))
698
$(foreach pkg,$(PACKAGES_STAGE0),$(eval libraries/$(pkg)_dist-boot_EXTRA_HC_OPTS += $$(GhcBootLibExtraHcOpts)))
699

Ian Lynagh's avatar
Ian Lynagh committed
700 701 702 703 704 705 706 707
# -----------------------------------------------------------------------------
# Bootstrapping libraries

# We need to build a few libraries with the installed GHC, since GHC itself
# and some of the tools depend on them:

ifneq "$(BINDIST)" "YES"

708
ifneq "$(BOOTSTRAPPING_CONF)" ""
Ian Lynagh's avatar
Ian Lynagh committed
709
ifeq "$(wildcard $(BOOTSTRAPPING_CONF))" ""
710
$(shell $(GHC_PKG) init $(BOOTSTRAPPING_CONF))
Ian Lynagh's avatar
Ian Lynagh committed
711
endif
712
endif
Ian Lynagh's avatar
Ian Lynagh committed
713

714
$(eval $(call clean-target,root,bootstrapping_conf,$(BOOTSTRAPPING_CONF)))
Ian Lynagh's avatar
Ian Lynagh committed
715 716 717 718 719

# register the boot packages in strict sequence, because running
# multiple ghc-pkgs in parallel doesn't work (registrations may get
# lost).
fixed_pkg_prev=
720
$(foreach pkg,$(PACKAGES_STAGE0),$(eval $(call fixed_pkg_dep,$(pkg),dist-boot)))
721 722 723 724 725
# ghc-pkg, unlike other utils that we build with the stage0 compiler (TODO: is
# this really true?), depends on several boot packages (e.g. Cabal and
# bin-package-db). They need to be configured before ghc-pkg, so we add a
# dependency between their package-data.mk files. See also Note
# [Dependencies between package-data.mk files].
726 727
utils/ghc-pkg/dist/package-data.mk: $(fixed_pkg_prev)
compiler/stage1/package-data.mk:    $(fixed_pkg_prev)
728
endif
Ian Lynagh's avatar
Ian Lynagh committed
729

730
ifneq "$(BINDIST)" "YES"
731 732
# Make sure we have all the GHCi libs by the time we've built
# ghc-stage2.  DPH includes a bit of Template Haskell which needs the
Gabor Greif's avatar
Typos  
Gabor Greif committed
733
# GHCi libs, and we don't have a better way to express that dependency.
734
#
735
GHCI_LIBS = $(foreach lib,$(PACKAGES_STAGE1),$(libraries/$(lib)_dist-install_GHCI_LIB)) \
736 737
	    $(compiler_stage2_GHCI_LIB)

738
ifeq "$(UseArchivesForGhci)" "NO"
739
ghc/stage2/build/tmp/$(ghc_stage2_PROG) : $(GHCI_LIBS)
740
endif
741

Ian Lynagh's avatar
Ian Lynagh committed
742 743 744 745 746 747
ifeq "$(UseArchivesForGhci)" "YES"
GHCI_lib_way = v
else
GHCI_lib_way = GHCI
endif

Ian Lynagh's avatar
Ian Lynagh committed
748 749 750
# Deps for TH uses in libraries
$(foreach way, $(GhcLibWays),$(eval \
libraries/vector/dist-install/build/Data/Vector/Fusion/Stream/Monadic.$($(way)_osuf): \
Ian Lynagh's avatar
Ian Lynagh committed
751
    $(libraries/primitive_dist-install_$(GHCI_lib_way)_LIB) \
Ian Lynagh's avatar
Ian Lynagh committed
752
  ))
Ian Lynagh's avatar
Ian Lynagh committed
753 754
endif

755 756 757 758 759 760 761 762 763 764 765 766 767
# -----------------------------------------------
# Haddock-related bits

# Build the Haddock contents and index
ifeq "$(HADDOCK_DOCS)" "YES"
libraries/dist-haddock/index.html: $(haddock_INPLACE) $(ALL_HADDOCK_FILES)
	cd libraries && sh gen_contents_index --intree
ifeq "$(phase)" "final"
$(eval $(call all-target,library_doc_index,libraries/dist-haddock/index.html))
endif
INSTALL_LIBRARY_DOCS += libraries/dist-haddock/*
endif

Ian Lynagh's avatar
Ian Lynagh committed
768 769 770
# -----------------------------------------------------------------------------
# Creating a local mingw copy on Windows

771
ifeq "$(Windows_Host)" "YES"
Ian Lynagh's avatar
Ian Lynagh committed
772 773 774 775

install : install_mingw
.PHONY: install_mingw
install_mingw : $(INPLACE_MINGW)
776
	"$(CP)" -Rp $(INPLACE_MINGW) $(prefix)
Ian Lynagh's avatar
Ian Lynagh committed
777

Ian Lynagh's avatar
Ian Lynagh committed
778 779 780 781 782
install : install_perl
.PHONY: install_perl
install_perl : $(INPLACE_PERL)
	"$(CP)" -Rp $(INPLACE_PERL) $(prefix)

783
endif # Windows_Host
Ian Lynagh's avatar
Ian Lynagh committed
784

785
ifneq "$(BINDIST)" "YES"
786
$(ghc-prim-$(libraries/ghc-prim_dist-install_VERSION)_HADDOCK_FILE): \
787
    libraries/ghc-prim/dist-install/build/autogen/GHC/Prim.hs
788
endif # BINDIST
Ian Lynagh's avatar
Ian Lynagh committed
789 790

libraries/ghc-prim/dist-install/build/autogen/GHC/Prim.hs: \
791
                            $(PRIMOPS_TXT_STAGE1) $$(genprimopcode_INPLACE) \
792
                          | $$(dir $$@)/.
793
	"$(genprimopcode_INPLACE)" --make-haskell-source < $< > $@
Ian Lynagh's avatar
Ian Lynagh committed
794

795 796 797
.PHONY: tags
tags: tags_compiler

798 799 800
.PHONY: TAGS
TAGS: TAGS_compiler

Ian Lynagh's avatar
Ian Lynagh committed
801 802 803
# -----------------------------------------------------------------------------
# Installation

804
install: install_libs install_packages install_libexecs \
805
         install_bins install_topdirs
Ian Lynagh's avatar
Ian Lynagh committed
806 807 808
ifeq "$(HADDOCK_DOCS)" "YES"
install: install_docs
endif
Ian Lynagh's avatar
Ian Lynagh committed
809

810 811 812
define installLibsTo
# $1 = libraries to install
# $2 = directory to install to
813 814 815 816 817
#
# The .dll case calls STRIP_CMD explicitly, instead of `install -s`, because
# on Win64, "install -s" calls a strip that doesn't understand 64bit binaries.
# For some reason, this means the DLLs end up non-executable, which means
# executables that use them just segfault.
818
	$(INSTALL_DIR) $2
819
	for i in $1; do \
Ian Lynagh's avatar
Ian Lynagh committed
820 821
		case $$i in \
		  *.a) \
822
		    $(INSTALL_DATA) $(INSTALL_OPTS) $$i $2; \
823
		    $(RANLIB_CMD) $2/`basename $$i` ;; \
Ian Lynagh's avatar
Ian Lynagh committed
824
		  *.dll) \
825
		    $(INSTALL_PROGRAM) $(INSTALL_OPTS) $$i $2 ; \
826
		    $(STRIP_CMD) $2/`basename $$i` ;; \
Ian Lynagh's avatar
Ian Lynagh committed
827
		  *.so) \
828
		    $(INSTALL_SHLIB) $(INSTALL_OPTS) $$i $2 ;; \
Ian Lynagh's avatar
Ian Lynagh committed
829
		  *.dylib) \
830
		    $(INSTALL_SHLIB) $(INSTALL_OPTS) $$i $2;; \
Ian Lynagh's avatar
Ian Lynagh committed
831
		  *) \
832
		    $(INSTALL_DATA) $(INSTALL_OPTS) $$i $2; \
Ian Lynagh's avatar
Ian Lynagh committed
833 834
		esac; \
	done
835 836
endef

837
install_bins: $(INSTALL_BINS) $(INSTALL_SCRIPTS)
838
	$(INSTALL_DIR) "$(DESTDIR)$(bindir)"
839
	for i in $(INSTALL_BINS); do \
840
		$(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i "$(DESTDIR)$(bindir)" ;  \
841
	done
842 843 844
	for i in $(INSTALL_SCRIPTS); do \
		$(INSTALL_SCRIPT) $(INSTALL_OPTS) $$i "$(DESTDIR)$(bindir)" ;  \
	done
845 846 847

install_libs: $(INSTALL_LIBS)
	$(call installLibsTo, $(INSTALL_LIBS), "$(DESTDIR)$(ghclibdir)")
Ian Lynagh's avatar
Ian Lynagh committed
848 849

install_libexecs:  $(INSTALL_LIBEXECS)
850 851 852
ifeq "$(INSTALL_LIBEXECS)" ""
	@:
else
853
	$(INSTALL_DIR) "$(DESTDIR)$(ghclibexecdir)/bin"
Ian Lynagh's avatar
Ian Lynagh committed
854
	for i in $(INSTALL_LIBEXECS); do \
855
		$(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i "$(DESTDIR)$(ghclibexecdir)/bin"; \
856
	done
857 858
# We rename ghc-stage2, so that the right program name is used in error
# messages etc.
859
	"$(MV)" "$(DESTDIR)$(ghclibexecdir)/bin/ghc-stage$(INSTALL_GHC_STAGE)" "$(DESTDIR)$(ghclibexecdir)/bin/ghc"
860
endif
861

862
install_topdirs: $(INSTALL_TOPDIR_BINS) $(INSTALL_TOPDIR_SCRIPTS)
863
	$(INSTALL_DIR) "$(DESTDIR)$(topdir)"
864
	for i in $(INSTALL_TOPDIR_BINS); do \
865
		$(INSTALL_PROGRAM) $(INSTALL_BIN_OPTS) $$i "$(DESTDIR)$(topdir)"; \
Ian Lynagh's avatar
Ian Lynagh committed
866
	done
867 868 869
	for i in $(INSTALL_TOPDIR_SCRIPTS); do \
		$(INSTALL_SCRIPT) $(INSTALL_OPTS) $$i "$(DESTDIR)$(topdir)"; \
	done
Ian Lynagh's avatar
Ian Lynagh committed
870

871
install_docs: $(INSTALL_DOCS)
872
	$(INSTALL_DIR) "$(DESTDIR)$(docdir)"
873
ifneq "$(INSTALL_DOCS)" ""
874
	for i in $(INSTALL_DOCS); do \
875
		$(INSTALL_DOC) $(INSTALL_OPTS) $$i "$(DESTDIR)$(docdir)"; \
876
	done
877
endif
878 879
	$(INSTALL_DIR) "$(DESTDIR)$(docdir)/html"
	$(INSTALL_DOC) $(INSTALL_OPTS) docs/index.html "$(DESTDIR)$(docdir)/html"
880
ifneq "$(INSTALL_LIBRARY_DOCS)" ""
881
	$(INSTALL_DIR) "$(DESTDIR)$(docdir)/html/libraries"
882
	for i in $(INSTALL_LIBRARY_DOCS); do \
883
		$(INSTALL_DOC) $(INSTALL_OPTS) $$i "$(DESTDIR)$(docdir)/html/libraries/"; \
884
	done
885 886
	$(INSTALL_DATA) $(INSTALL_OPTS) libraries/prologue.txt "$(DESTDIR)$(docdir)/html/libraries/"
	$(INSTALL_SCRIPT) $(INSTALL_OPTS) libraries/gen_contents_index "$(DESTDIR)$(docdir)/html/libraries/"
887 888
endif
ifneq "$(INSTALL_HTML_DOC_DIRS)" ""
889
	for i in $(INSTALL_HTML_DOC_DIRS); do \
890 891
		$(INSTALL_DIR) "$(DESTDIR)$(docdir)/html/`basename $$i`"; \
		$(INSTALL_DOC) $(INSTALL_OPTS) $$i/* "$(DESTDIR)$(docdir)/html/`basename $$i`"; \
892
	done
893
endif
894

895
INSTALLED_PACKAGE_CONF=$(DESTDIR)$(topdir)/package.conf.d
Ian Lynagh's avatar
Ian Lynagh committed
896 897 898

# Install packages in the right order, so that ghc-pkg doesn't complain.
# Also, install ghc-pkg first.
899
ifeq "$(Windows_Host)" "NO"
900 901
INSTALLED_GHC_REAL=$(DESTDIR)$(ghclibexecdir)/bin/ghc
INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(ghclibexecdir)/bin/ghc-pkg
Ian Lynagh's avatar
Ian Lynagh committed
902
else
Simon Marlow's avatar
Simon Marlow committed
903
INSTALLED_GHC_REAL=$(DESTDIR)$(bindir)/ghc.exe
Ian Lynagh's avatar
Ian Lynagh committed
904 905 906
INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(bindir)/ghc-pkg.exe
endif

907
# Set the INSTALL_DISTDIR_p for each package; compiler is special
908
$(foreach p,$(filter-out compiler,$(INSTALL_PACKAGES)),\
909
   $(eval INSTALL_DISTDIR_$p = dist-install))
Ian Lynagh's avatar
Ian Lynagh committed
910 911
INSTALL_DISTDIR_compiler = stage2

912
# Now we can do the installation
Ian Lynagh's avatar
Ian Lynagh committed
913
install_packages: install_libexecs
914
install_packages: rts/dist/package.conf.install
915
	$(INSTALL_DIR) "$(DESTDIR)$(topdir)"
916
	$(call removeTrees,"$(INSTALLED_PACKAGE_CONF)")
917 918
	$(INSTALL_DIR) "$(INSTALLED_PACKAGE_CONF)"
	$(INSTALL_DIR) "$(DESTDIR)$(topdir)/rts"
919
	$(call installLibsTo, $(RTS_INSTALL_LIBS), "$(DESTDIR)$(topdir)/rts")
920
	$(foreach p, $(INSTALL_PACKAGES),                             \
921
	    $(call make-command,                                      \
922
	           "$(ghc-cabal_INPLACE)" copy                        \
923
	                                  $p $(INSTALL_DISTDIR_$p)    \
ian@well-typed.com's avatar
ian@well-typed.com committed
924
	                                  "$(STRIP_CMD)"              \
925 926 927
	                                  '$(DESTDIR)'                \
	                                  '$(prefix)'                 \
	                                  '$(ghclibdir)'              \
928 929
	                                  '$(docdir)/html/libraries'  \
	                                  '$(GhcLibWays)'))
930
	"$(INSTALLED_GHC_PKG_REAL)" --force --global-package-db "$(INSTALLED_PACKAGE_CONF)" update rts/dist/package.conf.install
931
	$(foreach p, $(INSTALL_PACKAGES),                             \
932
	    $(call make-command,                                      \
933
	           "$(ghc-cabal_INPLACE)" register                    \
ian@well-typed.com's avatar
ian@well-typed.com committed
934
	                                  $p $(INSTALL_DISTDIR_$p)    \
935 936 937 938 939 940 941 942
	                                  "$(INSTALLED_GHC_REAL)"     \
	                                  "$(INSTALLED_GHC_PKG_REAL)" \
	                                  "$(DESTDIR)$(topdir)"       \
	                                  '$(DESTDIR)'                \
	                                  '$(prefix)'                 \
	                                  '$(ghclibdir)'              \
	                                  '$(docdir)/html/libraries'  \
	                                  $(RelocatableBuild)))
943
# when we install the packages above, ghc-pkg obeys umask when creating
944 945 946 947 948
# the package.conf files, but for everything else we specify the
# permissions. We therefore now fix the permissions of package.cache.
# This means "sudo make install" does the right thing even if it runs
# with an 077 umask.
	for f in '$(INSTALLED_PACKAGE_CONF)'/*; do $(CREATE_DATA) "$$f"; done
Ian Lynagh's avatar
Ian Lynagh committed
949 950 951 952

# -----------------------------------------------------------------------------
# Binary distributions

Simon Marlow's avatar
Simon Marlow committed
953 954 955 956
ifneq "$(CLEANING)" "YES"
# This rule seems to hold some files open on Windows which prevents
# cleaning, perhaps due to the $(wildcard).

957
$(eval $(call bindist-list,.,\
Ian Lynagh's avatar
Ian Lynagh committed
958
    LICENSE \
959 960
    README \
    INSTALL \
Ian Lynagh's avatar
Ian Lynagh committed
961
    configure config.sub config.guess install-sh \
962
    settings.in \
963
    packages \
Ian Lynagh's avatar
Ian Lynagh committed
964 965 966
    Makefile \
    mk/config.mk.in \
    $(INPLACE_BIN)/mkdirhier \
967
    utils/ghc-cabal/dist-install/build/tmp/ghc-cabal \
968
    utils/ghc-pwd/dist-install/build/tmp/ghc-pwd \
Ian Lynagh's avatar
Ian Lynagh committed
969 970 971 972 973
    $(BINDIST_WRAPPERS) \
    $(BINDIST_PERL_SOURCES) \
    $(BINDIST_LIBS) \
    $(BINDIST_HI) \
    $(BINDIST_EXTRAS) \
974
    $(includes_H_FILES) \
Ian Lynagh's avatar
Ian Lynagh committed
975 976
    $(includes_DERIVEDCONSTANTS) \
    $(includes_GHCCONSTANTS) \
977
    $(libffi_HEADERS) \
Ian Lynagh's avatar
Ian Lynagh committed
978 979
    $(INSTALL_LIBEXECS) \
    $(INSTALL_LIBEXEC_SCRIPTS) \
980 981
    $(INSTALL_TOPDIR_BINS) \
    $(INSTALL_TOPDIR_SCRIPTS) \
Ian Lynagh's avatar
Ian Lynagh committed
982
    $(INSTALL_BINS) \
983
    $(INSTALL_SCRIPTS) \
984
    $(INSTALL_MANPAGES) \
Ian Lynagh's avatar
Ian Lynagh committed
985
    $(INSTALL_DOCS) \
986
    $(INSTALL_LIBRARY_DOCS) \
Ian Lynagh's avatar
Ian Lynagh committed
987
    $(addsuffix /*,$(INSTALL_HTML_DOC_DIRS)) \
Ian Lynagh's avatar
Ian Lynagh committed
988 989 990 991
    docs/index.html \
    compiler/stage2/doc \
    $(wildcard libraries/*/dist-install/doc/) \
    $(wildcard libraries/*/*/dist-install/doc/) \
992
    $(filter-out settings,$(INSTALL_LIBS)) \
993
    $(RTS_INSTALL_LIBS) \
994
    $(filter-out %/project.mk mk/config.mk %/mk/install.mk,$(MAKEFILE_LIST)) \
Ian Lynagh's avatar
Ian Lynagh committed
995 996 997 998 999
    mk/project.mk \
    mk/install.mk.in \
    bindist.mk \
    libraries/gen_contents_index \
    libraries/prologue.txt \
1000 1001 1002 1003
    $(wildcard libraries/dph/LICENSE \
               libraries/dph/ghc-packages \
               libraries/dph/ghc-packages2 \
               libraries/dph/ghc-stage2-package) \
Ian Lynagh's avatar
Ian Lynagh committed
1004
 ))
Simon Marlow's avatar
Simon Marlow committed
1005
endif
Ian Lynagh's avatar
Ian Lynagh committed
1006 1007 1008
# mk/project.mk gets an absolute path, so we manually include it in
# the bindist with a relative path

Ian Lynagh's avatar
Ian Lynagh committed
1009
BIN_DIST_MK = $(BIN_DIST_PREP_DIR)/bindist.mk
Ian Lynagh's avatar
Ian Lynagh committed
1010

Ian Lynagh's avatar
Ian Lynagh committed
1011
unix-binary-dist-prep:
1012
	$(call removeTrees,bindistprep/)
1013
	"$(MKDIRHIER)" $(BIN_DIST_PREP_DIR)
1014
	set -e; for i in packages LICENSE compiler ghc rts libraries utils docs libffi includes driver mk rules Makefile aclocal.m4 config.sub config.guess install-sh settings.in ghc.mk inplace distrib/configure.ac distrib/README distrib/INSTALL; do ln -s ../../$$i $(BIN_DIST_PREP_DIR)/; done
Ian Lynagh's avatar
Ian Lynagh committed
1015 1016 1017 1018
	echo "HADDOCK_DOCS       = $(HADDOCK_DOCS)"       >> $(BIN_DIST_MK)
	echo "BUILD_DOCBOOK_HTML = $(BUILD_DOCBOOK_HTML)" >> $(BIN_DIST_MK)
	echo "BUILD_DOCBOOK_PS   = $(BUILD_DOCBOOK_PS)"   >> $(BIN_DIST_MK)
	echo "BUILD_DOCBOOK_PDF  = $(BUILD_DOCBOOK_PDF)"  >> $(BIN_DIST_MK)
1019
	echo "BUILD_MAN          = $(BUILD_MAN)"          >> $(BIN_DIST_MK)
ian@well-typed.com's avatar
ian@well-typed.com committed
1020
	echo "override ghc-cabal_INPLACE = utils/ghc-cabal/dist-install/build/tmp/ghc-cabal-bindist" >> $(BIN_DIST_MK)
1021
	echo "UseSystemLibFFI    = $(UseSystemLibFFI)"    >> $(BIN_DIST_MK)
Ian Lynagh's avatar
Ian Lynagh committed
1022
	cd $(BIN_DIST_PREP_DIR) && autoreconf
1023
	$(call removeFiles,$(BIN_DIST_PREP_TAR))
Ian Lynagh's avatar
Ian Lynagh committed
1024 1025
# h means "follow symlinks", e.g. if aclocal.m4 is a symlink to a source
# tree then we want to include the real file, not a symlink to it
1026
	cd bindistprep && "$(TAR_CMD)" hcf - -T ../bindist-list | $(TAR_COMP_CMD) -c > ../$(BIN_DIST_PREP_TAR_COMP)
1027

Ian Lynagh's avatar
Ian Lynagh committed
1028
windows-binary-dist-prep:
1029
	$(call removeTrees,bindistprep/)
1030
	$(MAKE) prefix=$(TOP)/$(BIN_DIST_PREP_DIR) install
1031
	cd bindistprep && "$(TAR_CMD)" cf - $(BIN_DIST_NAME) | $(TAR_COMP_CMD) -c > ../$(BIN_DIST_PREP_TAR_COMP)
1032

1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045
# tryTimes tries to run its third argument multiple times, until it
# succeeds. Don't call it directly; call try10Times instead.
# The first and second argument to tryTimes are lists of values.
# The length of the first argument is the number of times we have
# already tried. The length of the second argument is the number more
# times we will try.
tryTimes = $(if $2, \
                { echo 'Try $(words x $1): $3' ; $3 ; } || \
                $(call tryTimes,x $1,$(wordlist 2,$(words $2),$2),$3), \
                )

# Try to run the argument 10 times. If all 10 fail, fail.
try10Times = $(call tryTimes,,x x x x x x x x x x,$1) { echo Failed; false; }
1046 1047 1048

.PHONY: publish-binary-dist
publish-binary-dist:
1049
	$(call try10Times,$(PublishCp) $(BIN_DIST_TAR_COMP) $(PublishLocation)/dist)
Ian Lynagh's avatar
Ian Lynagh committed
1050

1051
ifeq "$(mingw32_TARGET_OS)" "1"
1052
DOCDIR_TO_PUBLISH = $(BIN_DIST_INST_DIR)/doc
1053
else
1054
DOCDIR_TO_PUBLISH = $(BIN_DIST_INST_DIR)/share/doc/ghc
1055 1056
endif

Ian Lynagh's avatar
Ian Lynagh committed
1057 1058
.PHONY: publish-docs
publish-docs:
1059
	$(call try10Times,$(PublishCp) -r $(DOCDIR_TO_PUBLISH)/* $(PublishLocation)/docs)
Ian Lynagh's avatar
Ian Lynagh committed
1060