package(
    default_visibility = ["//visibility:public"],
)

cc_library(
    name = "libdivsufsort",
    srcs = [
        "lib/divsufsort.c",
        "lib/sssort.c",
        "lib/trsort.c",
        "lib/utils.c",
    ],
    hdrs = [
        "include/config.h",
        "include/divsufsort.h",
        "include/divsufsort_private.h",
    ],
    copts = [
        "-DHAVE_CONFIG_H=1",
    ],
    includes = ["include"],
)

commom_awk_replaces = (
    "gsub(/#cmakedefine/, \"#define\"); " +
    "gsub(/@DIVSUFSORT_EXPORT@/, \"\"); " +
    "gsub(/@DIVSUFSORT_IMPORT@/, \"\"); " +
    "gsub(/@INLINE@/, \"inline\"); " +
    "gsub(/@INCFILE@/, \"#include <inttypes.h>\"); " +
    "gsub(/@SAUCHAR_TYPE@/, \"uint8_t\"); " +
    "gsub(/@SAINT32_TYPE@/, \"int32_t\"); " +
    "gsub(/@SAINT_PRId@/, \"PRId32\"); "
)

genrule(
    name = "config_h",
    srcs = ["include/config.h.cmake"],
    outs = ["include/config.h"],
    cmd = ("awk '{ " +
           "gsub(/@HAVE_IO_H 1@/, \"HAVE_IO_H 0\"); " +
           commom_awk_replaces +
           "print; }' $(<) > $(@)"),
)

genrule(
    name = "divsufsort_h",
    srcs = ["include/divsufsort.h.cmake"],
    outs = ["include/divsufsort.h"],
    cmd = ("awk '{ " +
           "gsub(/@W64BIT@/, \"\"); " +
           "gsub(/@SAINDEX_TYPE@/, \"int32_t\"); " +
           "gsub(/@SAINDEX_PRId@/, \"PRId32\"); " +
           commom_awk_replaces +
           "print; }' $(<) > $(@)"),
)