Skip to content

FreeBSD 13.0-RELEASE compatibility #112

Description

@realnedsanders

working on FreeBSD compatibility.

Currently testing using 13.0-RELEASE-p6.

uname -r
13.0-RELEASE-p6

First issue was git2go.

13.0-RELEASE-p6 uses libgit2 version 1.3.0.

pkg-config --modversion libgit2
1.3.0

This corresponds to git2go V33 per the documentation.

I updated the imports to "github.com/libgit2/git2go/v33", updated the Makefile to use GIT2GO_VERSION = v33.0.7, and added SHELL = /usr/local/bin/bash to the top of the Makefile.

Then, I encountered an issue with scm/git.go on line 301.
git2go v27 -> v33 changed type TreeWalkCallback : func(string, *TreeEntry) int -> func(string, *TreeEntry) error

Since the anonymous func just returns 0 anyways, I just changed the return type to error and the return to nil and called it a day.

go vet ran successfully 👍

  300     err := childTree.Walk(
~ 301       func(s string, entry *git.TreeEntry) error {
  302         switch entry.Filemode {
  303         case git.FilemodeTree:
  304           // directory where file entry is located
  305           path = filepath.ToSlash(entry.Name)
  306         default:
  307           files = append(files, filepath.Join(path, entry.Name))
  308           fileCnt++
  309         }
~ 310         return nil
  311       })
@@ -298,7 +298,7 @@ func DiffParentCommit(childCommit *git.Commit) (CommitStats, error) {
                files := []string{}

                err := childTree.Walk(
-                       func(s string, entry *git.TreeEntry) int {
+                       func(s string, entry *git.TreeEntry) error {
                                switch entry.Filemode {
                                case git.FilemodeTree:
                                        // directory where file entry is located
@@ -307,7 +307,7 @@ func DiffParentCommit(childCommit *git.Commit) (CommitStats, error) {
                                        files = append(files, filepath.Join(path, entry.Name))
                                        fileCnt++
                                }
-                               return 0
+                               return nil
                        })

Now it builds, but not with --tags 'static'.

gmake build                                                                            Mon Jan 31 04:35:36 2022
go build --tags 'static' -ldflags "-X main.Version=0.0.0-dev-019de99" -o bin/gtm
# pkg-config --cflags --static -- /usr/home/aescaler/code/dev-tools/gtm/vendor/github.com/libgit2/git2go/v33/static-build/install/lib/pkgconfig/libgit2.pc
Package vendor/github.com/libgit2/git2go/v33/static-build/install/lib/pkgconfig/libgit2.pc was not found in the pkg-config search path.
Perhaps you should add the directory containing `/usr/home/aescaler/code/dev-tools/gtm/vendor/github.com/libgit2/git2go/v33/static-build/install/lib/pkgconfig/libgit2.pc.pc'
to the PKG_CONFIG_PATH environment variable
Package '/usr/home/aescaler/code/dev-tools/gtm/vendor/github.com/libgit2/git2go/v33/static-build/install/lib/pkgconfig/libgit2.pc', required by 'virtual:world', not found
pkg-config: exit status 1
gmake: *** [Makefile:13: build] Error 2

Looks like an issue with some libgit2 stuff so I checked out the git2go readme and it has info on static builds.
I changed the Makefile, which now only needs to use gmake install-static after cding in the git2go target.
It also wasn't pointing to the right directories, so I changed GIT2GO_PATH to vendor/github.com/libgit2/git2go.

With a few more edits to the Makefile paths and the git commands, I was able to get it to compile statically linked.

gmake build                                              
go build --tags 'static' -ldflags "-X main.Version=0.0.0-dev-019de99" -o bin/gtm

I'll have a PR submitted, probably tomorrow as it is already late for me.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions