1# ----------------------------------------------------------------------------- 2# 3# (c) 2009 The University of Glasgow 4# 5# This file is part of the GHC build system. 6# 7# To understand how the build system works and how to modify it, see 8# https://gitlab.haskell.org/ghc/ghc/wikis/building/architecture 9# https://gitlab.haskell.org/ghc/ghc/wikis/building/modifying 10# 11# ----------------------------------------------------------------------------- 12 13 14define hs-sources # args: $1 = dir, $2 = distdir 15 16ifeq "$$($1_$2_HS_SRC_DIRS)" "" 17$1_$2_HS_SRC_DIRS = . 18endif 19 20# Here we collect all the .hs/.lhs source files that we can find. If 21# we can't find a Haskell source file for a given module, then presumably 22# it can be generated by preprocessing something (.hsc, .y, .x etc.), so 23# we depend on dist/build/Foo.hs in anticipation that the implicit rules 24# will put the preprocessed source file there. 25# 26# NB. use :=, we only want this thing evaluated once. 27# 28$1_$2_HS_SRCS := $$(foreach file,$$($1_$2_SLASH_MODS),\ 29 $$(firstword \ 30 $$(wildcard \ 31 $$(foreach dir,$$($1_$2_HS_SRC_DIRS) $2/build/$$(or $$($1_EXECUTABLE),$$($1_$2_PROGNAME),.)/autogen,\ 32 $1/$$(dir)/$$(file).hs $1/$$(dir)/$$(file).lhs)) \ 33 $1/$2/build/$$(file).hs)) 34 35# .hs-boot files must be in the same place as the .hs file they go 36# with (GHC assumes this). When we preprocess a source file, and 37# that module has a .hs-boot or .lhs-boot file, we must arrange to 38# copy the file into the distdir so that it ends up alongside the 39# preprocessed .hs file. This complicated macro figures out for which 40# files we need to do this, so we can add them as dependencies of the 41# .depend file rule. 42# 43# for each .hs file in the build dir, 44# if there is a .hs-boot or .lhs-boot file for it in a source dir, 45# we want that file in the build dir. 46# 47# NB. use :=, we only want this thing evaluated once. 48# 49$1_$2_HS_BOOT_SRCS := $$(foreach dir,$$($1_$2_HS_SRC_DIRS),\ 50 $$(subst $1/$$(dir),$1/$2/build,\ 51 $$(wildcard \ 52 $$(subst $1/$2/build,$1/$$(dir),\ 53 $$(foreach file,\ 54 $$(filter $1/$2/build%,$$($1_$2_HS_SRCS)),\ 55 $$(patsubst %.hs,%.hs-boot,$$(file)) \ 56 $$(patsubst %.hs,%.lhs-boot,$$(file))))))) 57 58endef 59