diff options
author | Vincent Ambo <tazjin@google.com> | 2019-07-04T10·18+0100 |
---|---|---|
committer | Vincent Ambo <tazjin@google.com> | 2019-07-04T10·18+0100 |
commit | f723b8b878a3c4a4687b9e337a875500bebb39b1 (patch) | |
tree | e85204cf042c355e90cff61c111e7d8cd15df311 /third_party/bazel/rules_haskell/debug/linking_utils/BUILD.bazel | |
parent | 2eb1dc26e42ffbdc168f05ef744bd4b4f3e4c36f (diff) |
feat(third_party/bazel): Check in rules_haskell from Tweag r/17
Diffstat (limited to 'third_party/bazel/rules_haskell/debug/linking_utils/BUILD.bazel')
-rw-r--r-- | third_party/bazel/rules_haskell/debug/linking_utils/BUILD.bazel | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/third_party/bazel/rules_haskell/debug/linking_utils/BUILD.bazel b/third_party/bazel/rules_haskell/debug/linking_utils/BUILD.bazel new file mode 100644 index 000000000000..a32be2cfb6f9 --- /dev/null +++ b/third_party/bazel/rules_haskell/debug/linking_utils/BUILD.bazel @@ -0,0 +1,50 @@ +load( + ":ldd_test.bzl", + "ldd_test", +) + +py_library( + name = "linking_utils", + srcs = ["ldd.py"], + visibility = ["//visibility:public"], +) + +# test the ldd debug library on the output of `//tests/binary-indirect-cbits` +ldd_test( + name = "test-ldd", + current_workspace = None, + elf_binary = "//tests/binary-indirect-cbits", + script = r''' +import sys + +def contains_error(error): + """check whether any of the dependencies contains `error`, + where error is something from `LDD_ERRORS`. + Returns {} if there's no error. + """ + def f(d): + return { k: v for k, v in d['needed'].items() + if (v == error + or (v not in LDD_ERRORS + and dict_remove_empty(v['item']) != {})) } + return f + +# output should have some runpaths +assert \ + ldd(identity, sys.argv[1])['runpath_dirs']\ + > 0 + +# some of the dependencies are implicit and not in NEEDED flags +assert ldd(contains_error(LDD_UNKNOWN), sys.argv[1]) + +import pprint +# none of the dependencies must be missing +res = ldd(contains_error(LDD_MISSING), sys.argv[1]) +if res != {}: + print("These dependencies are missing:") + pprint.pprint(res) + exit(1) +''', + # it only works on linux + tags = ["dont_test_on_darwin"], +) |