# Copyright 2017 The Fuchsia Authors. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#    * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#    * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
#    * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import("//packages/package.gni")

package("git") {
  deps = [
    ":all",
  ]

  binaries = [
    {
      name = "git"
    },

    {
      name = "git-daemon"
    },

    {
      name = "git-http-backend"
    },

    {
      name = "git-http-fetch"
    },

    {
      name = "git-http-push"
    },

    {
      name = "git-remote-http"
    },

    {
      name = "git-remote-http"
    },

    {
      name = "git-upload-pack"
    },
  ]
}

config("git_config") {
  cflags = [
    "-Wno-sign-compare",
    "-Wno-missing-field-initializers",
    "-Wno-pointer-bool-conversion",
    "-Wno-tautological-compare",
  ]
  defines = [
    "BINDIR=\"/bin\"",
    "DEFAULT_PAGER=\"cat\"",
    "ETC_GITATTRIBUTES=\"/etc/gitattributes\"",
    "ETC_GITCONFIG=\"/etc/gitconfig\"",
    "GAWK",
    "GIT_EXEC_PATH=\"\"",
    "GIT_HTML_PATH=\"/html\"",
    "GIT_INFO_PATH=\"/info\"",
    "GIT_LOCALE_PATH=\"/share/locale\"",
    "GIT_MAN_PATH=\"/man\"",
    "GIT_USER_AGENT=\"git\"",
    "GIT_VERSION=\"\"",
    "HAVE_CLOCK_GETTIME",
    "HAVE_CLOCK_MONOTONIC",
    "HAVE_GETDELIM",
    "HAVE_SYS_IOCTL_H",
    "NO_MBSUPPORT",
    "NO_MMAP",
    "NO_PERL",
    "NO_REGEX",
    "NO_SYS_POLL_H",
    "PAGER_ENV=\"LESS=FRX LV=-c\"",
    "PREFIX=\"/system/bin\"",
  ]
  include_dirs = [
    ".",
    "compat/regex",
  ]
}

source_set("git_srcs") {
  sources = [
    "abspath.c",
    "advice.c",
    "advice.h",
    "alias.c",
    "alloc.c",
    "apply.c",
    "apply.h",
    "archive-tar.c",
    "archive-zip.c",
    "archive.c",
    "archive.h",
    "argv-array.c",
    "argv-array.h",
    "attr.c",
    "attr.h",
    "base85.c",
    "bisect.c",
    "bisect.h",
    "blob.c",
    "blob.h",
    "block-sha1/sha1.c",
    "block-sha1/sha1.h",
    "branch.c",
    "branch.h",
    "bulk-checkin.c",
    "bulk-checkin.h",
    "bundle.c",
    "bundle.h",
    "cache-tree.c",
    "cache-tree.h",
    "cache.h",

    # "check-racy.c",
    "color.c",
    "color.h",
    "column.c",
    "column.h",
    "combine-diff.c",
    "commit-slab.h",
    "commit.c",
    "commit.h",
    "common-main.c",
    "compat/bswap.h",
    "compat/fopen.c",
    "compat/hstrerror.c",
    "compat/memmem.c",
    "compat/mkdir.c",
    "compat/mkdtemp.c",
    "compat/mmap.c",
    "compat/obstack.c",
    "compat/obstack.h",
    "compat/poll/poll.c",
    "compat/poll/poll.h",
    "compat/pread.c",
    "compat/qsort.c",
    "compat/qsort_s.c",
    "compat/regex/regex.c",
    "compat/regex/regex.h",
    "compat/setenv.c",
    "compat/snprintf.c",
    "compat/stat.c",
    "compat/strcasestr.c",
    "compat/strlcpy.c",
    "compat/strtoimax.c",
    "compat/strtoumax.c",
    "compat/terminal.c",
    "compat/terminal.h",
    "config.c",
    "connect.c",
    "connect.h",
    "connected.c",
    "connected.h",
    "convert.c",
    "convert.h",
    "copy.c",

    # "credential-cache--daemon.c",
    # "credential-cache.c",
    # "credential-store.c",
    "credential.c",
    "credential.h",
    "csum-file.c",
    "csum-file.h",
    "ctype.c",
    "date.c",
    "decorate.c",
    "decorate.h",
    "delta.h",
    "diff-delta.c",
    "diff-lib.c",
    "diff-no-index.c",
    "diff.c",
    "diff.h",
    "diffcore-break.c",
    "diffcore-delta.c",
    "diffcore-order.c",
    "diffcore-pickaxe.c",
    "diffcore-rename.c",
    "diffcore.h",
    "dir-iterator.c",
    "dir-iterator.h",
    "dir.c",
    "dir.h",
    "editor.c",
    "entry.c",
    "environment.c",
    "ewah/bitmap.c",
    "ewah/ewah_bitmap.c",
    "ewah/ewah_io.c",
    "ewah/ewah_rlw.c",
    "ewah/ewok.h",
    "ewah/ewok_rlw.h",
    "exec_cmd.c",
    "exec_cmd.h",

    # "fast-import.c",
    "fetch-pack.c",
    "fetch-pack.h",
    "fmt-merge-msg.h",
    "fsck.c",
    "fsck.h",
    "gettext.c",
    "gettext.h",
    "git-compat-util.h",
    "gpg-interface.c",
    "gpg-interface.h",
    "graph.c",
    "graph.h",
    "grep.c",
    "grep.h",
    "hash.h",
    "hashmap.c",
    "hashmap.h",
    "help.c",
    "help.h",
    "hex.c",
    "ident.c",

    # "imap-send.c",
    "iterator.h",
    "khash.h",
    "kwset.c",
    "kwset.h",
    "levenshtein.c",
    "levenshtein.h",
    "line-log.c",
    "line-log.h",
    "line-range.c",
    "line-range.h",
    "list-objects.c",
    "list-objects.h",
    "list.h",
    "ll-merge.c",
    "ll-merge.h",
    "lockfile.c",
    "lockfile.h",
    "log-tree.c",
    "log-tree.h",
    "mailinfo.c",
    "mailinfo.h",
    "mailmap.c",
    "mailmap.h",
    "match-trees.c",
    "merge-blobs.c",
    "merge-blobs.h",
    "merge-recursive.c",
    "merge-recursive.h",
    "merge.c",
    "mergesort.c",
    "mergesort.h",
    "mru.c",
    "mru.h",
    "name-hash.c",
    "notes-cache.c",
    "notes-cache.h",
    "notes-merge.c",
    "notes-merge.h",
    "notes-utils.c",
    "notes-utils.h",
    "notes.c",
    "notes.h",
    "object.c",
    "object.h",
    "oidset.c",
    "oidset.h",
    "pack-bitmap-write.c",
    "pack-bitmap.c",
    "pack-bitmap.h",
    "pack-check.c",
    "pack-objects.c",
    "pack-objects.h",
    "pack-revindex.c",
    "pack-revindex.h",
    "pack-write.c",
    "pack.h",
    "pager.c",
    "parse-options-cb.c",
    "parse-options.c",
    "parse-options.h",
    "patch-delta.c",
    "patch-ids.c",
    "patch-ids.h",
    "path.c",
    "pathspec.c",
    "pathspec.h",
    "pkt-line.c",
    "pkt-line.h",
    "preload-index.c",
    "pretty.c",
    "prio-queue.c",
    "prio-queue.h",
    "progress.c",
    "progress.h",
    "prompt.c",
    "prompt.h",
    "quote.c",
    "quote.h",
    "reachable.c",
    "reachable.h",
    "read-cache.c",
    "ref-filter.c",
    "ref-filter.h",
    "reflog-walk.c",
    "reflog-walk.h",
    "refs.c",
    "refs.h",
    "refs/files-backend.c",
    "refs/iterator.c",
    "refs/refs-internal.h",

    # "remote-testsvn.c",
    "remote.c",
    "remote.h",
    "replace_object.c",
    "rerere.c",
    "rerere.h",
    "resolve-undo.c",
    "resolve-undo.h",
    "revision.c",
    "revision.h",
    "run-command.c",
    "run-command.h",
    "send-pack.c",
    "send-pack.h",
    "sequencer.c",
    "sequencer.h",
    "server-info.c",
    "setup.c",

    # "sh-i18n--envsubst.c",
    "sha1-array.c",
    "sha1-array.h",
    "sha1-lookup.c",
    "sha1-lookup.h",
    "sha1_file.c",
    "sha1_name.c",
    "shallow.c",

    # "shell.c",
    "shortlog.h",

    # "show-index.c",
    "sideband.c",
    "sideband.h",
    "sigchain.c",
    "sigchain.h",
    "split-index.c",
    "split-index.h",
    "strbuf.c",
    "strbuf.h",
    "streaming.c",
    "streaming.h",
    "string-list.c",
    "string-list.h",
    "submodule-config.c",
    "submodule-config.h",
    "submodule.c",
    "submodule.h",
    "symlinks.c",
    "tag.c",
    "tag.h",
    "tar.h",
    "tempfile.c",
    "tempfile.h",
    "thread-utils.c",
    "thread-utils.h",
    "tmp-objdir.c",
    "tmp-objdir.h",
    "trace.c",
    "trace.h",
    "trailer.c",
    "trailer.h",
    "transport-helper.c",
    "transport.c",
    "transport.h",
    "tree-diff.c",
    "tree-walk.c",
    "tree-walk.h",
    "tree.c",
    "tree.h",
    "unicode_width.h",
    "unix-socket.c",
    "unix-socket.h",
    "unpack-trees.c",
    "unpack-trees.h",
    "url.c",
    "url.h",
    "urlmatch.c",
    "urlmatch.h",
    "usage.c",
    "userdiff.c",
    "userdiff.h",
    "utf8.c",
    "utf8.h",
    "varint.c",
    "varint.h",
    "vcs-svn/fast_export.c",
    "vcs-svn/fast_export.h",
    "vcs-svn/line_buffer.c",
    "vcs-svn/line_buffer.h",
    "vcs-svn/repo_tree.c",
    "vcs-svn/repo_tree.h",
    "vcs-svn/sliding_window.c",
    "vcs-svn/sliding_window.h",
    "vcs-svn/svndiff.c",
    "vcs-svn/svndiff.h",
    "vcs-svn/svndump.c",
    "vcs-svn/svndump.h",
    "version.c",
    "version.h",
    "versioncmp.c",
    "walker.c",
    "walker.h",
    "wildmatch.c",
    "wildmatch.h",
    "worktree.c",
    "worktree.h",
    "wrapper.c",
    "write_or_die.c",
    "ws.c",
    "wt-status.c",
    "wt-status.h",
    "xdiff-interface.c",
    "xdiff-interface.h",
    "xdiff/xdiff.h",
    "xdiff/xdiffi.c",
    "xdiff/xdiffi.h",
    "xdiff/xemit.c",
    "xdiff/xemit.h",
    "xdiff/xhistogram.c",
    "xdiff/xinclude.h",
    "xdiff/xmacros.h",
    "xdiff/xmerge.c",
    "xdiff/xpatience.c",
    "xdiff/xprepare.c",
    "xdiff/xprepare.h",
    "xdiff/xtypes.h",
    "xdiff/xutils.c",
    "xdiff/xutils.h",
    "zlib.c",
  ]
  public_deps = [
    "//third_party/boringssl:crypto",
    "//third_party/boringssl:ssl",
    "//third_party/curl:libcurl",
    "//third_party/expat",
    "//third_party/zlib",
  ]
  public_configs = [ ":git_config" ]
  libs = [ "launchpad" ]
}

executable("git-bin") {
  output_name = "git"
  sources = [
    "builtin.h",
    "builtin/add.c",
    "builtin/am.c",
    "builtin/annotate.c",
    "builtin/apply.c",
    "builtin/archive.c",
    "builtin/bisect--helper.c",
    "builtin/blame.c",
    "builtin/branch.c",
    "builtin/bundle.c",
    "builtin/cat-file.c",
    "builtin/check-attr.c",
    "builtin/check-ignore.c",
    "builtin/check-mailmap.c",
    "builtin/check-ref-format.c",
    "builtin/checkout-index.c",
    "builtin/checkout.c",
    "builtin/clean.c",
    "builtin/clone.c",
    "builtin/column.c",
    "builtin/commit-tree.c",
    "builtin/commit.c",
    "builtin/config.c",
    "builtin/count-objects.c",
    "builtin/credential.c",
    "builtin/describe.c",
    "builtin/diff-files.c",
    "builtin/diff-index.c",
    "builtin/diff-tree.c",
    "builtin/diff.c",
    "builtin/difftool.c",
    "builtin/fast-export.c",
    "builtin/fetch-pack.c",
    "builtin/fetch.c",
    "builtin/fmt-merge-msg.c",
    "builtin/for-each-ref.c",
    "builtin/fsck.c",
    "builtin/gc.c",
    "builtin/get-tar-commit-id.c",
    "builtin/grep.c",
    "builtin/hash-object.c",
    "builtin/help.c",
    "builtin/index-pack.c",
    "builtin/init-db.c",
    "builtin/interpret-trailers.c",
    "builtin/log.c",
    "builtin/ls-files.c",
    "builtin/ls-remote.c",
    "builtin/ls-tree.c",
    "builtin/mailinfo.c",
    "builtin/mailsplit.c",
    "builtin/merge-base.c",
    "builtin/merge-file.c",
    "builtin/merge-index.c",
    "builtin/merge-ours.c",
    "builtin/merge-recursive.c",
    "builtin/merge-tree.c",
    "builtin/merge.c",
    "builtin/mktag.c",
    "builtin/mktree.c",
    "builtin/mv.c",
    "builtin/name-rev.c",
    "builtin/notes.c",
    "builtin/pack-objects.c",
    "builtin/pack-redundant.c",
    "builtin/pack-refs.c",
    "builtin/patch-id.c",
    "builtin/prune-packed.c",
    "builtin/prune.c",
    "builtin/pull.c",
    "builtin/push.c",
    "builtin/read-tree.c",
    "builtin/rebase--helper.c",
    "builtin/receive-pack.c",
    "builtin/reflog.c",
    "builtin/remote-ext.c",
    "builtin/remote-fd.c",
    "builtin/remote.c",
    "builtin/repack.c",
    "builtin/replace.c",
    "builtin/rerere.c",
    "builtin/reset.c",
    "builtin/rev-list.c",
    "builtin/rev-parse.c",
    "builtin/revert.c",
    "builtin/rm.c",
    "builtin/send-pack.c",
    "builtin/shortlog.c",
    "builtin/show-branch.c",
    "builtin/show-ref.c",
    "builtin/stripspace.c",
    "builtin/submodule--helper.c",
    "builtin/symbolic-ref.c",
    "builtin/tag.c",
    "builtin/unpack-file.c",
    "builtin/unpack-objects.c",
    "builtin/update-index.c",
    "builtin/update-ref.c",
    "builtin/update-server-info.c",
    "builtin/upload-archive.c",
    "builtin/var.c",
    "builtin/verify-commit.c",
    "builtin/verify-pack.c",
    "builtin/verify-tag.c",
    "builtin/worktree.c",
    "builtin/write-tree.c",
    "git.c",
  ]
  deps = [
    ":git_srcs",
  ]
}

template("gitprogram") {
  executable("git-" + target_name) {
    sources = [
      invoker.target_name + ".c",
    ]
    if (defined(invoker.sources)) {
      sources += invoker.sources
    }
    deps = [
      ":git_srcs",
    ]
  }
}

gitprogram("daemon") {
}
gitprogram("http-backend") {
}
gitprogram("http-fetch") {
  sources = [
    "http-walker.c",
    "http.c",
    "http.h",
  ]
}
gitprogram("http-push") {
  sources = [
    "http.c",
    "http.h",
  ]
}
gitprogram("upload-pack") {
}

executable("git-remote-http") {
  sources = [
    "http-walker.c",
    "http.c",
    "remote-curl.c",
  ]
  deps = [
    ":git_srcs",
  ]
}

group("all") {
  public_deps = [
    ":git-bin",
    ":git-daemon",
    ":git-http-backend",
    ":git-http-fetch",
    ":git-http-push",
    ":git-remote-http",
    ":git-upload-pack",
  ]
}
