blob: f93bd2a186ff62ecb94dfc64b03601891418bee7 [file] [log] [blame]
load("@bazel_skylib//rules:copy_file.bzl", "copy_file")
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
GAWK_COPTS = ["-w"]
filegroup(
name = "missing_d",
srcs = [
"missing_d/strcoll.c",
"missing_d/strftime.c",
"missing_d/strncasecmp.c",
"missing_d/timegm.c",
],
visibility = ["//visibility:public"],
)
cc_library(
name = "gettext",
hdrs = ["gettext.h"],
visibility = ["//visibility:public"],
)
cc_library(
name = "pc",
srcs = glob(["pc/*.c"]),
hdrs = glob(["pc/*.h"]) + ["pc/gawkmisc.pc"],
defines = [
"__MINGW32__",
"__USE_MINGW_ANSI_STDIO",
'LOCALEDIR="\\\"c:/gnu/share/locale\\\""',
'DEFLIBPATH="\\\"c:/gnu/lib/gawk\\\""',
'SHLIBEXT="\\\"dll\\\""',
],
target_compatible_with = ["@platforms//os:windows"],
)
cc_library(
name = "posix",
hdrs = ["posix/gawkmisc.c"],
defines = [
"""LOCALEDIR='"/usr/local/share/locale"'""",
'DEFLIBPATH="\\\"/usr/local/lib/gawk\\\""',
'SHLIBEXT="\\\"so\\\""',
"""DEFPATH='".:/usr/local/share/awk"'""",
],
target_compatible_with = select({
"@platforms//os:windows": ["@platforms//:incompatible"],
"//conditions:default": [],
}),
)
cc_library(
name = "support",
srcs = [
"support/dfa.c",
"support/getopt.c",
"support/getopt1.c",
"support/localeinfo.c",
"support/malloc/dynarray_at_failure.c",
"support/malloc/dynarray_emplace_enlarge.c",
"support/malloc/dynarray_finalize.c",
"support/malloc/dynarray_resize.c",
"support/malloc/dynarray_resize_clear.c",
"support/random.c",
"support/regex.c",
] + select({
"@platforms//os:linux": [
"support/pma.c",
],
"//conditions:default": [],
}),
hdrs = glob([
"support/*.h",
"support/malloc/*.h",
]) + [
"support/malloc/dynarray-skeleton.c",
"support/regcomp.c",
"support/regex_internal.c",
"support/regexec.c",
],
copts = GAWK_COPTS,
includes = [
"support",
"support/malloc",
] + select({
"@platforms//os:windows": [
"pc",
],
"//conditions:default": [
"config",
"posix",
],
}),
deps = [
":config",
":custom",
":gettext",
],
)
cc_library(
name = "custom",
hdrs = ["custom.h"],
visibility = ["//visibility:public"],
)
copy_file(
name = "config_h",
src = select({
"@platforms//os:linux": "posix/config_linux.h",
"@platforms//os:macos": "posix/config_darwin.h",
"@platforms//os:windows": "pc/config.h",
}),
out = "config/config.h",
)
cc_library(
name = "config",
hdrs = [":config_h"],
defines = [
"GAWK",
"HAVE_CONFIG_H",
],
deps = select({
"@platforms//os:windows": [":pc"],
"//conditions:default": [":posix"],
}),
)
cc_library(
name = "awk",
srcs = glob(["*.c"]),
hdrs = glob(["*.h"]) + [":missing_d"],
copts = GAWK_COPTS,
includes = ["./support"],
linkopts = select({
"@platforms//os:linux": [
"-ldl",
],
"@platforms//os:windows": [
"-lws2_32",
# TODO: why there is multiple definitions?
"-Wl,-allow-multiple-definition",
],
"//conditions:default": [],
}),
visibility = ["//visibility:public"],
deps = [
":config",
":support",
],
)
cc_binary(
name = "gawk",
srcs = ["main.c"],
copts = GAWK_COPTS,
visibility = ["//visibility:public"],
deps = [":awk"],
)