1# Copyright (c) 2020. The YARA Authors. All Rights Reserved.
2#
3# Redistribution and use in source and binary forms, with or without modification,
4# are permitted provided that the following conditions are met:
5#
6# 1. Redistributions of source code must retain the above copyright notice, this
7# list of conditions and the following disclaimer.
8#
9# 2. Redistributions in binary form must reproduce the above copyright notice,
10# this list of conditions and the following disclaimer in the documentation and/or
11# other materials provided with the distribution.
12#
13# 3. Neither the name of the copyright holder nor the names of its contributors
14# may be used to endorse or promote products derived from this software without
15# specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
21# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
24# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28# Bazel (http://bazel.io/) BUILD file for openssl library which is a dependency
29# for YARA.
30
31config_setting(
32    name = "darwin",
33    values = {
34        "cpu": "darwin_x86_64",
35    },
36)
37
38cc_library(
39    name = "crypto",
40    srcs = ["libcrypto.a"],
41    hdrs = glob(["include/openssl/*.h"]) + ["include/openssl/opensslconf.h"],
42    includes = ["include"],
43    linkopts = select({
44        ":darwin": [],
45        "//conditions:default": [
46            "-lpthread",
47            "-ldl",
48        ],
49    }),
50    visibility = ["//visibility:public"],
51)
52
53cc_library(
54    name = "ssl",
55    srcs = ["libssl.a"],
56    hdrs = glob(["include/openssl/*.h"]) + ["include/openssl/opensslconf.h"],
57    includes = ["include"],
58    visibility = ["//visibility:public"],
59    deps = [":crypto"],
60)
61
62genrule(
63    name = "openssl-build",
64    srcs = glob(
65        ["**/*"],
66        exclude = ["bazel-*"],
67    ),
68    outs = [
69        "libcrypto.a",
70        "libssl.a",
71        "include/openssl/opensslconf.h",
72    ],
73    cmd = """
74        CONFIG_LOG=$$(mktemp)
75        MAKE_LOG=$$(mktemp)
76        OPENSSL_ROOT=$$(dirname $(location config))
77        pushd $$OPENSSL_ROOT > /dev/null
78            if ! ./config > $$CONFIG_LOG; then
79                cat $$CONFIG_LOG
80            fi
81            if ! make -j 4 > $$MAKE_LOG; then
82                cat $$MAKE_LOG
83            fi
84        popd > /dev/null
85        cp $$OPENSSL_ROOT/libcrypto.a $(location libcrypto.a)
86        cp $$OPENSSL_ROOT/libssl.a $(location libssl.a)
87        cp $$OPENSSL_ROOT/include/openssl/opensslconf.h $(location include/openssl/opensslconf.h)
88    """,
89)
90