diff options
Diffstat (limited to 'third_party/bazel/rules_haskell/tests/library-with-sysincludes')
4 files changed, 118 insertions, 0 deletions
diff --git a/third_party/bazel/rules_haskell/tests/library-with-sysincludes/BUILD.bazel b/third_party/bazel/rules_haskell/tests/library-with-sysincludes/BUILD.bazel new file mode 100644 index 000000000000..ddd5de65198c --- /dev/null +++ b/third_party/bazel/rules_haskell/tests/library-with-sysincludes/BUILD.bazel @@ -0,0 +1,86 @@ +load( + "@io_tweag_rules_haskell//haskell:haskell.bzl", + "haskell_library", +) + +package(default_testonly = 1) + +genrule( + name = "genrule-header", + outs = [ + "include/foo.h", + ], + cmd = "touch $(location include/foo.h)", +) + +# A locally-defined replica of @zlib.dev//:zlib. +# Since that shared library lives in another package, we must +# use an absolute path for strip_include_prefix. +cc_library( + name = "zlib", + hdrs = ["@zlib.dev//:include"], + strip_include_prefix = "/external/zlib.dev/include", + tags = ["requires_zlib"], + deps = ["@zlib"], +) + +cc_library( + name = "zlib-with-genrule-header", + hdrs = [":genrule-header"], + strip_include_prefix = "include", + tags = ["requires_zlib"], +) + +haskell_library( + name = "intermediate-library", + srcs = ["IntLib.hsc"], + tags = ["requires_zlib"], + deps = [ + ":zlib", + ":zlib-with-genrule-header", + "//tests/hackage:base", + ], +) + +haskell_library( + name = "library-with-sysincludes", + srcs = [ + "Lib.hs", + "TH.hs", + ], + tags = ["requires_zlib"], + visibility = ["//visibility:public"], + deps = [ + ":intermediate-library", + "//tests/hackage:base", + "//tests/hackage:template-haskell", + ], +) + +# Replicate the above example, but use the externally-defined +# cc_library rule. +haskell_library( + name = "intermediate-library-other", + srcs = ["IntLib.hsc"], + tags = ["requires_zlib"], + deps = [ + ":zlib-with-genrule-header", + "//tests/hackage:base", + "@zlib.dev//:zlib", + ], +) + +haskell_library( + name = "library-with-sysincludes-other", + srcs = [ + "Lib.hs", + "TH.hs", + ], + tags = ["requires_zlib"], + visibility = ["//visibility:public"], + deps = [ + ":intermediate-library-other", + "//tests/hackage:base", + "//tests/hackage:template-haskell", + ], +) diff --git a/third_party/bazel/rules_haskell/tests/library-with-sysincludes/IntLib.hsc b/third_party/bazel/rules_haskell/tests/library-with-sysincludes/IntLib.hsc new file mode 100644 index 000000000000..cf31e3d9a844 --- /dev/null +++ b/third_party/bazel/rules_haskell/tests/library-with-sysincludes/IntLib.hsc @@ -0,0 +1,15 @@ +{-# LANGUAGE CPP #-} + +module IntLib (crc) where + +import Foreign.Ptr +import Foreign.C.Types + +#include <zlib.h> +#include "foo.h" + +foreign import ccall crc32 :: CLong -> Ptr () -> CInt -> IO () + +crc = crc32 0 nullPtr 0 + +z = #{size struct gz_header_s} diff --git a/third_party/bazel/rules_haskell/tests/library-with-sysincludes/Lib.hs b/third_party/bazel/rules_haskell/tests/library-with-sysincludes/Lib.hs new file mode 100644 index 000000000000..55b1860fdddd --- /dev/null +++ b/third_party/bazel/rules_haskell/tests/library-with-sysincludes/Lib.hs @@ -0,0 +1,8 @@ +{-# LANGUAGE TemplateHaskell #-} + +module Lib (bar) where + +import TH (foo) + +bar :: IO () +bar = $foo diff --git a/third_party/bazel/rules_haskell/tests/library-with-sysincludes/TH.hs b/third_party/bazel/rules_haskell/tests/library-with-sysincludes/TH.hs new file mode 100644 index 000000000000..45929ec84040 --- /dev/null +++ b/third_party/bazel/rules_haskell/tests/library-with-sysincludes/TH.hs @@ -0,0 +1,9 @@ +{-# LANGUAGE TemplateHaskell #-} + +module TH (foo) where + +import IntLib (crc) +import Language.Haskell.TH + +foo :: Q Exp +foo = [| crc |] |