summaryrefslogtreecommitdiff
path: root/rules/sdist-ghc-file.mk
diff options
context:
space:
mode:
Diffstat (limited to 'rules/sdist-ghc-file.mk')
-rw-r--r--rules/sdist-ghc-file.mk46
1 files changed, 46 insertions, 0 deletions
diff --git a/rules/sdist-ghc-file.mk b/rules/sdist-ghc-file.mk
new file mode 100644
index 0000000000..9ea0b6521a
--- /dev/null
+++ b/rules/sdist-ghc-file.mk
@@ -0,0 +1,46 @@
+# -----------------------------------------------------------------------------
+#
+# This file is part of the GHC build system.
+#
+# To understand how the build system works and how to modify it, see
+# http://ghc.haskell.org/trac/ghc/wiki/Building/Architecture
+# http://ghc.haskell.org/trac/ghc/wiki/Building/Modifying
+#
+# -----------------------------------------------------------------------------
+
+
+# Add files generated by alex and happy to a source distribution.
+#
+# Invoke like this:
+#
+# $(eval $(call sdist-ghc-file,compiler,stage2,parser,Parser,y))
+#
+# This adds the file 'compiler/stage2/build/Parser.hs' to the sdist, in the
+# same directory as 'compiler/parser/Parser.y' (which is renamed).
+
+define sdist-ghc-file
+# $1 = dir
+# $2 = distdir
+# $3 = srcdir (can be empty)
+# $4 = filename
+# $5 = extension
+
+.PHONY: sdist_$1_$2_$4
+
+# We should do this before creating the `sdist-ghc` tarball, or when just
+# running `make sdist-ghc-prep`.
+sdist-ghc-prep : sdist_$1_$2_$4
+
+# But first create SRC_DIST_GHC_DIR.
+sdist_$1_$2_$4 : sdist-ghc-prep-tree
+
+# Generate the .hs files if they don't exist yet, then do actual copying and
+# moving.
+sdist_$1_$2_$4 : $1/$2/build/$4.hs
+ "$(CP)" $1/$2/build/$4.hs $(SRC_DIST_GHC_DIR)/$1/$3
+ mv $(SRC_DIST_GHC_DIR)/$1/$3/$4.$5 $(SRC_DIST_GHC_DIR)/$1/$3/$4.$5.source
+
+# And make sure the rules for generating the .hs files exist, even when we
+# didn't generate all package-data.mk files.
+$$(eval $$(call hs-suffix-rules-srcdir,$1,$2,$3))
+endef