diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6aebed1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+SOURCES/go-rpm-macros-3.0.9.tar.gz
+SOURCES/golist-0.10.1.tar.gz
diff --git a/.go-rpm-macros.metadata b/.go-rpm-macros.metadata
new file mode 100644
index 0000000..93786de
--- /dev/null
+++ b/.go-rpm-macros.metadata
@@ -0,0 +1,2 @@
+013899032cc1bcad52bb1fd4effe383e2afb7105 SOURCES/go-rpm-macros-3.0.9.tar.gz
+bf428b2ba15f68df39e3da7647ccfdeb8beedd3b SOURCES/golist-0.10.1.tar.gz
diff --git a/SOURCES/golist-bootstrap-cli-no-vendor.patch b/SOURCES/golist-bootstrap-cli-no-vendor.patch
new file mode 100644
index 0000000..e8bc793
--- /dev/null
+++ b/SOURCES/golist-bootstrap-cli-no-vendor.patch
@@ -0,0 +1,322 @@
+diff --git a/cmd/golist/golist.go b/cmd/golist/golist.go
+index ee028ae..e9c038d 100644
+--- a/cmd/golist/golist.go
++++ b/cmd/golist/golist.go
+@@ -11,9 +11,8 @@ import (
+ 	"strings"
+ 	"text/template"
+ 
+-	"github.com/urfave/cli"
+-
+ 	"pagure.io/golist/pkg/util"
++	"pagure.io/golist/pkg/cli"
+ )
+ 
+ var (
+@@ -100,7 +99,6 @@ func main() {
+ 	}
+ 
+ 	app.Action = func(c *cli.Context) error {
+-
+ 		if len(c.StringSlice("package-path")) == 0 {
+ 			return fmt.Errorf("--package-path is not set")
+ 		}
+diff --git a/pkg/cli/cli.go b/pkg/cli/cli.go
+new file mode 100644
+index 0000000..ec91056
+--- /dev/null
++++ b/pkg/cli/cli.go
+@@ -0,0 +1,293 @@
++package cli
++
++/* golist uses a very small portion of functionality
++   from github.com/urfave/cli. This module provides
++   minimal substitute API implementations for only the
++   core functionality used by golist, for the purpose of
++   bootstrapping golist without additional dependencies.
++*/
++
++import (
++	"strings"
++	"fmt"
++	"os"
++)
++
++type String string
++type StringSlice []string
++type Bool bool
++
++type Flag interface {
++	name() string
++	usage() string
++}
++
++type BoolFlag struct {
++	Name string
++	Usage string
++	Value bool
++}
++
++type StringFlag struct {
++	Name string
++	Usage string
++	Value string
++}
++
++type StringSliceFlag struct {
++	Name string
++	Usage string
++	Value *StringSlice
++}
++
++type App struct {
++	Name string
++	Usage string
++	Version string
++	Flags []Flag
++	Action func(*Context) error
++
++}
++
++func NewApp() App {
++	var a App
++	return a
++}
++
++func (a *App) Run(osArgs []string) error {
++	c, err := newContext(a.Flags, osArgs)
++	if err != nil {
++		return err
++	}
++	if c.Bool("help") {
++		a.PrintHelp()
++		os.Exit(0)
++	}
++	return a.Action(c)
++}
++
++func (a *App) PrintHelp() {
++	maxNameLen := 0
++	for _, flag := range a.Flags {
++		length := len(flag.name())
++		if length > maxNameLen {
++			maxNameLen = length
++		}
++	}
++	fmtSpec := "%-" + fmt.Sprintf("%v", maxNameLen + 6) + "s\t%s\n"
++	fmt.Printf("%s - %s\n", a.Name, a.Usage)
++	fmt.Printf("Options:\n")
++	for _, flag := range a.Flags {
++		flagNameSlice := append([]string{canonicalName(flag)}, alternateNames(flag)...)
++		for i, _ := range flagNameSlice {
++			if len(flagNameSlice[i]) > 1 {
++				flagNameSlice[i] = fmt.Sprintf("--%s", flagNameSlice[i])
++			} else {
++				flagNameSlice[i] = fmt.Sprintf("-%s", flagNameSlice[i])
++			}
++		}
++		flagNameStr := strings.Join(flagNameSlice, ", ")
++		switch flag.(type) {
++			case StringFlag:
++				flagNameStr = fmt.Sprintf("  %s value", flagNameStr)
++			case StringSliceFlag:
++				flagNameStr = fmt.Sprintf("  %s value", flagNameStr)
++			case BoolFlag:
++				flagNameStr = fmt.Sprintf("  %s", flagNameStr)
++		}
++		fmt.Printf(fmtSpec, flagNameStr, flag.usage())
++	}
++}
++
++
++type Context struct {
++	flagValues map[string]interface{}
++	flagDecls map[string]Flag
++	altFlags map[string]string
++	positionalArgs []string
++}
++
++func (c *Context) Bool(flag string) bool {
++	iface, ok := c.flagDecls[flag]
++	if !ok {
++		panic("undefined flag" + flag)
++	}
++	switch iface.(type) {
++		case BoolFlag:
++			break
++		default:
++			panic("flag type mismatch - expected BoolFlag, got: " + flag)
++	}
++	val, ok := c.flagValues[flag]
++	if !ok {
++		return iface.(BoolFlag).Value
++	}
++	return val.(bool)
++}
++
++func (c *Context) String(flag string) string {
++	iface, ok := c.flagDecls[flag]
++	if !ok {
++		panic("undefined flag" + flag)
++	}
++	switch iface.(type) {
++		case StringFlag:
++			break
++		default:
++			panic("flag type mismatch - expected StringFlag, got: " + flag)
++	}
++	val, ok:= c.flagValues[flag]
++	if !ok {
++		return iface.(StringFlag).Value
++	}
++	return val.(string)
++}
++
++func (c *Context) StringSlice(flag string) []string {
++	iface, ok := c.flagDecls[flag];
++	if !ok {
++		panic("undefined flag" + flag)
++	}
++	switch iface.(type) {
++		case StringSliceFlag:
++			break
++		default:
++			panic("flag type mismatch - expected StringSliceFlag, got: " + flag)
++	}
++	val, ok := c.flagValues[flag]
++	if !ok {
++		val = iface.(StringSliceFlag).Value
++		if val != nil {
++			return []string{}
++		}
++	}
++	return val.([]string)
++}
++
++// Create a hash mapping from flag names to declarations
++// and alt names to flag names.
++func (c *Context) setupFlags(flagDecls []Flag) error {
++	helpFlag := BoolFlag {
++		Name: "help, h",
++		Usage: "Show help message",
++	}
++	flagDecls = append(flagDecls, helpFlag)
++	for _, flag := range flagDecls {
++		flagName := canonicalName(flag)
++		if _, ok:= c.flagDecls[flagName]; ok {
++			return fmt.Errorf("cannot redeclare flag: %s", flagName)
++		}
++		c.flagDecls[flagName] = flag
++		altFlagNames := alternateNames(flag)
++		for _, altName := range altFlagNames {
++			c.altFlags[altName] = flagName
++		}
++	}
++	return nil
++}
++
++func (c *Context) parseArgs(osArgs []string) error {
++	// process command line arguments as a stream of tokens.
++	// operations consume the first token in the stream until
++	// the stream is empty.
++	argStream := osArgs
++	for len(argStream) > 0 {
++		arg := argStream[0]
++		if ! isFlag(arg) {
++			argStream = argStream[1:]
++			c.positionalArgs = append(c.positionalArgs, arg)
++
++		} else {
++			arg = trimFlag(arg)
++			if _, ok:= c.altFlags[arg]; ok {
++				arg = c.altFlags[arg]
++			}
++			iface, ok := c.flagDecls[arg]
++			if !ok {
++				return fmt.Errorf("unexpected argument: %v", arg)
++			}
++			switch flag := iface.(type) {
++				case StringFlag:
++					argStream = argStream[1:]
++					if len(argStream) == 0 {
++						return fmt.Errorf("expected value for argument: %v", arg)
++					}
++					if isFlag(argStream[0]) {
++						return fmt.Errorf("unexpected flag: %v", arg)
++					}
++					c.flagValues[arg] = argStream[0]
++				case StringSliceFlag:
++					argStream = argStream[1:]
++					if len (argStream) == 0 {
++						return fmt.Errorf("expected value for argument: %v", arg)
++					}
++					if isFlag(argStream[0]) {
++						return fmt.Errorf("unexpected flag: %v", arg)
++					}
++					c.flagValues[arg] = make([]string, 0)
++					c.flagValues[arg] = append(c.flagValues[arg].([]string), argStream[0])
++					argStream = argStream[1:]
++					for len(argStream) > 0 && ! isFlag(argStream[0]) {
++						c.flagValues[arg] = append(c.flagValues[arg].([]string), argStream[0])
++						argStream = argStream[1:]
++					}
++				case BoolFlag:
++					argStream = argStream[1:]
++					c.flagValues[canonicalName(flag)] = true
++				default:
++					return fmt.Errorf("unexpected flag: %v", arg)
++			}
++		}
++	}
++	return nil
++}
++
++func newContext(flags []Flag, osArgs []string) (*Context, error) {
++	var c Context
++	c.flagValues = make(map[string]interface{})
++	c.flagDecls = make(map[string]Flag)
++	c.altFlags = make(map[string]string)
++	c.altFlags = make(map[string]string)
++	if err := c.setupFlags(flags); err != nil {
++		return nil, err
++	}
++	if err := c.parseArgs(osArgs); err != nil {
++		return nil, err
++	}
++	return &c, nil
++}
++
++func (f StringFlag) name() string {return f.Name}
++func (f StringFlag) usage() string {return f.Usage}
++func (f BoolFlag) name() string {return f.Name}
++func (f BoolFlag) usage() string {return f.Usage}
++func (f StringSliceFlag) name() string {return f.Name}
++func (f StringSliceFlag) usage() string {return f.Usage}
++
++// takes a Flag with a comma delimited string
++// of flag names and returns the first one
++func canonicalName(flag Flag) string {
++	flagNames := strings.Split(flag.name(), ",")
++	return strings.TrimSpace(flagNames[0])
++}
++
++// takes a Flag with a comma delimited string
++// of flag names and returns them as a string slice
++// with the canonical (first) flag ommitted
++func alternateNames(flag Flag) []string {
++	flagNames := strings.Split(flag.name(), ",")
++	altNames := flagNames[1:]
++	for i, _ := range altNames {
++		altNames[i] = strings.TrimSpace(altNames[i])
++	}
++	return altNames
++}
++
++func isFlag(arg string) bool {
++  return strings.HasPrefix(arg, "-")
++}
++
++func trimFlag(arg string) string {
++  return strings.Trim(strings.Trim(arg, "-"), "-")
++}
++
diff --git a/SOURCES/update-default-gobuild-args.patch b/SOURCES/update-default-gobuild-args.patch
new file mode 100644
index 0000000..2ca10c9
--- /dev/null
+++ b/SOURCES/update-default-gobuild-args.patch
@@ -0,0 +1,50 @@
+diff --git a/rpm/macros.d/macros.go-compilers-golang b/rpm/macros.d/macros.go-compilers-golang
+index b0ab4c4..942549f 100644
+--- a/rpm/macros.d/macros.go-compilers-golang
++++ b/rpm/macros.d/macros.go-compilers-golang
+@@ -20,6 +20,8 @@
+ #
+ # SPDX-License-Identifier: GPL-3.0-or-later
+ 
++%gocompilerflags -buildmode pie -compiler gc
++
+ # This *must* be all on one line, as it will be used in shell
+ # assignments. eg
+ #
+@@ -29,22 +31,33 @@
+ #
+ #    %make GOBUILDFLAGS="%gobuildflags"
+ #
+-%gobuildflags() %{expand:%{gocompilerflags} -tags=\\"rpm_crashtraceback \\" -ldflags \\"${LDFLAGS:-}%{?currentgoldflags} -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \\n') -extldflags '%__global_ldflags %{?__golang_extldflags}'\\" -a -v -x}
++%gobuildflags() %{expand:%{gocompilerflags} -tags=\\"rpm_crashtraceback ${BUILDTAGS:-} libtrust_openssl\\" -ldflags \\"-linkmode=external -compressdwarf=false ${LDFLAGS:-}%{?currentgoldflags} -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \\n') -extldflags '%__global_ldflags %{?__golang_extldflags}'\\" -a -v -x}
++%_gobuildflags_internal() %{expand:%{gocompilerflags} -tags="rpm_crashtraceback ${BUILDTAGS:-} libtrust_openssl" -ldflags "-linkmode=external -compressdwarf=false ${LDFLAGS:-}%{?currentgoldflags} -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \\n') -extldflags '%__global_ldflags %{?__golang_extldflags}'" -a -v -x}
+ 
+ # Turn off Go modules
+ %gomodulesmode GO111MODULE=off
+ 
+ # Define commands for building
+ # BUILD_ID can be generated for golang build no matter of debuginfo
++
++%_gobuild_cmd CGO_CPPFLAGS="-D_FORTIFY_SOURCE=2 -fstack-protector-all" go build %{_gobuildflags_internal}
++%gobuild_compat_el8(o:) %{expand:%{_gobuild_cmd} %{?**};}
+ %gobuild(o:) %{expand:
+   # https://bugzilla.redhat.com/show_bug.cgi?id=995136#c12
+   %global _dwz_low_mem_die_limit 0
+   %{?gobuilddir:GOPATH="%{gobuilddir}:${GOPATH:+${GOPATH}:}%{?gopath}"} %{?gomodulesmode} \\
+-  go build %{?gocompilerflags} -tags="rpm_crashtraceback ${BUILDTAGS:-}" -ldflags "${LDFLAGS:-}%{?currentgoldflags} -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \\n') -extldflags '%__global_ldflags %{?__golang_extldflags}'" -a -v -x %{?**};
++  %{_gobuild_cmd} %{?**};
+ }
+ ${workroot}${GOPATH:+:${GOPATH}}
+ 
+ # Define commands for testing
+ %gotestflags      %{gocompilerflags}
+ %gotestextldflags %__global_ldflags %{?__golang_extldflags}
+-%gotest() %{?gomodulesmode} go test %{gotestflags} -ldflags "${LDFLAGS:-}%{?currentgoldflags} -extldflags '%{gotestextldflags}'" %{?**};
++
++%_gotest_cmd %{?gomodulesmode} go test %{gotestflags} -ldflags "${LDFLAGS:-}%{?currentgoldflags} -extldflags '%{gotestextldflags}'"
++%gotest_compat_el8(o:) %{expand:%{_gotest_cmd} %{?**};}
++%gotest(o:) %{expand:
++  %{?gobuilddir:GOPATH="%{gobuilddir}:${GOPATH:+${GOPATH}:}%{?gopath}"} %{?gomodulesmode} \\
++  %{_gotest_cmd} %{?**};
++}
++
diff --git a/SPECS/go-rpm-macros.spec b/SPECS/go-rpm-macros.spec
new file mode 100644
index 0000000..6c5c694
--- /dev/null
+++ b/SPECS/go-rpm-macros.spec
@@ -0,0 +1,292 @@
+%global forgeurl  https://pagure.io/go-rpm-macros
+Version:   3.0.9
+%forgemeta
+
+#https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/51
+%global _spectemplatedir %{_datadir}/rpmdevtools/fedora
+%global _docdir_fmt     %{name}
+
+# Master definition that will be written to macro files
+%global golang_arches   %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
+%global gccgo_arches    %{mips}
+%if 0%{?rhel} >= 9
+%global golang_arches   x86_64 aarch64 ppc64le s390x
+%endif
+# Go sources can contain arch-specific files and our macros will package the
+# correct files for each architecture. Therefore, move gopath to _libdir and
+# make Go devel packages archful
+%global gopath          %{_datadir}/gocode
+
+# whether to bundle golist or require it as a dependency
+%global bundle_golist 1
+
+%if 0%{?bundle_golist}
+# do not create debuginfo packages when we add a build section
+%global debug_package %{nil}
+%global golist_version 0.10.1
+%global golist_builddir %{_builddir}/golist-%{golist_version}/_build
+%global golist_goipath pagure.io/golist
+# where to bundle the golist executable
+%global golist_execdir %{_libexecdir}/go-rpm-macros/
+# define gobuild to avoid this package requiring itself to build
+%define gobuild(o:) GO111MODULE=off go build -buildmode pie -compiler gc -tags="rpm_crashtraceback ${BUILDTAGS:-}" -ldflags "${LDFLAGS:-} -B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \\n') -extldflags '-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld '" -a -v %{?**};
+%endif
+
+ExclusiveArch: %{golang_arches} %{gccgo_arches}
+
+Name:      go-rpm-macros
+Release:   9%{?dist}
+Summary:   Build-stage rpm automation for Go packages
+
+License:   GPLv3+
+URL:       %{forgeurl}
+Source0:   %{forgesource}
+%if 0%{?bundle_golist}
+Source1:   https://pagure.io/golist/archive/v%{golist_version}/golist-%{golist_version}.tar.gz
+%endif
+
+Requires:  go-srpm-macros = %{version}-%{release}
+Requires:  go-filesystem  = %{version}-%{release}
+
+%if 0%{?bundle_golist}
+BuildRequires: golang
+%else
+Requires:  golist
+%endif
+
+%ifarch %{golang_arches}
+Requires:  golang
+Provides:  compiler(golang)
+Provides:  compiler(go-compiler) = 2
+Obsoletes: go-compilers-golang-compiler < %{version}-%{release}
+%endif
+
+%ifarch %{gccgo_arches}
+Requires:  gcc-go
+Provides:  compiler(gcc-go)
+Provides:  compiler(go-compiler) = 1
+Obsoletes: go-compilers-gcc-go-compiler < %{version}-%{release}
+%endif
+
+Patch0: update-default-gobuild-args.patch
+# Replace golang-github-urfave-cli with a minimal
+# command line parser backend to bootstrap golist
+# without dependencies.
+Patch1: golist-bootstrap-cli-no-vendor.patch
+
+%description
+This package provides build-stage rpm automation to simplify the creation of Go
+language (golang) packages.
+
+It does not need to be included in the default build root: go-srpm-macros will
+pull it in for Go packages only.
+
+%package -n go-srpm-macros
+Summary:   Source-stage rpm automation for Go packages
+BuildArch: noarch
+Requires:  redhat-rpm-config
+
+%description -n go-srpm-macros
+This package provides SRPM-stage rpm automation to simplify the creation of Go
+language (golang) packages.
+
+It limits itself to the automation subset required to create Go SRPM packages
+and needs to be included in the default build root.
+
+The rest of the automation is provided by the go-rpm-macros package, that
+go-srpm-macros will pull in for Go packages only.
+
+%package -n go-filesystem
+Summary:   Directories used by Go packages
+License:   Public Domain
+
+%description -n go-filesystem
+This package contains the basic directory layout used by Go packages.
+
+%package -n go-rpm-templates
+Summary:   RPM spec templates for Go packages
+License:   MIT
+BuildArch: noarch
+Requires:  go-rpm-macros = %{version}-%{release}
+#https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/51
+#Requires:  redhat-rpm-templates
+
+%description -n go-rpm-templates
+This package contains documented rpm spec templates showcasing how to use the
+macros provided by go-rpm-macros to create Go packages.
+
+%prep
+%forgesetup
+
+%patch0 -p1
+
+%writevars -f rpm/macros.d/macros.go-srpm golang_arches gccgo_arches gopath
+for template in templates/rpm/*\.spec ; do
+  target=$(echo "${template}" | sed "s|^\(.*\)\.spec$|\1-bare.spec|g")
+  grep -v '^#' "${template}" > "${target}"
+  touch -r "${template}" "${target}"
+done
+
+# unpack golist and patch
+%if 0%{?bundle_golist}
+pushd %{_builddir}
+tar -xf %{_sourcedir}/golist-%{golist_version}.tar.gz
+cd golist-%{golist_version}
+%patch1 -p1
+cp %{_builddir}/golist-%{golist_version}/LICENSE %{_builddir}/go-rpm-macros-%{version}/LICENSE-golist
+popd
+
+# create directory structure for a Go build
+if [[ ! -e %{golist_builddir}/bin ]]; then
+  install -m 0755 -vd %{golist_builddir}/bin
+  export GOPATH=%{golist_builddir}:${GOPATH:+${GOPATH}:}/usr/share/gocode
+fi
+if [[ ! -e %{golist_builddir}/src/%{golist_goipath} ]]; then
+  install -m 0755 -vd %{golist_builddir}/src/pagure.io
+  ln -sf $(dirname %{golist_builddir}) %{golist_builddir}/src/%{golist_goipath}
+
+fi
+%endif
+
+%build
+# build golist
+%if 0%{?bundle_golist}
+pushd %{golist_builddir}/src/%{golist_goipath}
+export GOPATH=%{golist_builddir}:${GOPATH:+${GOPATH}:}/usr/share/gocode
+for cmd in cmd/* ; do
+  %gobuild -o %{golist_builddir}/bin/$(basename $cmd) %{golist_goipath}/$cmd
+done
+popd
+%endif
+
+%install
+# Some of those probably do not work with gcc-go right now
+# This is not intentional, but mips is not a primary Fedora architecture
+# Patches and PRs are welcome
+
+install -m 0755 -vd   %{buildroot}%{gopath}/src
+
+install -m 0755 -vd   %{buildroot}%{_spectemplatedir}
+
+if ls templates/rpm/*\.spec; then
+  install -m 0644 -vp   templates/rpm/*spec \
+                        %{buildroot}%{_spectemplatedir}
+fi
+
+install -m 0755 -vd   %{buildroot}%{_bindir}
+install -m 0755 bin/* %{buildroot}%{_bindir}
+
+install -m 0755 -vd   %{buildroot}%{rpmmacrodir}
+install -m 0644 -vp   rpm/macros.d/macros.go-* \
+                      %{buildroot}%{rpmmacrodir}
+install -m 0755 -vd   %{buildroot}%{_rpmluadir}/fedora/srpm
+install -m 0644 -vp   rpm/lua/srpm/*lua \
+                      %{buildroot}%{_rpmluadir}/fedora/srpm
+install -m 0755 -vd   %{buildroot}%{_rpmluadir}/fedora/rpm
+install -m 0644 -vp   rpm/lua/rpm/*lua \
+                      %{buildroot}%{_rpmluadir}/fedora/rpm
+install -m 0755 -vd   %{buildroot}%{_rpmconfigdir}/fileattrs
+install -m 0644 -vp   rpm/fileattrs/*.attr \
+                      %{buildroot}%{_rpmconfigdir}/fileattrs/
+install -m 0755 -vp   rpm/*\.{prov,deps} \
+                      %{buildroot}%{_rpmconfigdir}/
+
+%ifarch %{golang_arches}
+install -m 0644 -vp   rpm/macros.d/macros.go-compilers-golang \
+                      %{buildroot}%{_rpmconfigdir}/macros.d/macros.go-compiler-golang
+%endif
+
+%ifarch %{gccgo_arches}
+install -m 0644 -vp   rpm/macros.d/macros.go-compilers-gcc \
+                      %{buildroot}%{_rpmconfigdir}/macros.d/macros.go-compiler-gcc
+%endif
+
+# install golist
+%if 0%{?bundle_golist}
+install -m 0755 -vd                     %{buildroot}%{golist_execdir}
+install -m 0755 -vp %{golist_builddir}/bin/* %{buildroot}%{golist_execdir}/
+sed -i "s,golist,%{golist_execdir}/golist,g" %{buildroot}%{_bindir}/go-rpm-integration
+%endif
+
+%files
+%license LICENSE.txt LICENSE-golist
+%doc README.md
+%{_bindir}/*
+%{_rpmconfigdir}/fileattrs/*.attr
+%{_rpmconfigdir}/*.prov
+%{_rpmconfigdir}/*.deps
+%{_rpmconfigdir}/macros.d/macros.go-rpm*
+%{_rpmconfigdir}/macros.d/macros.go-compiler*
+%{_rpmluadir}/fedora/rpm/*.lua
+# package golist
+%if 0%{?bundle_golist}
+%{golist_execdir}/golist
+%endif
+
+%files -n go-srpm-macros
+%license LICENSE.txt
+%doc README.md
+%{_rpmconfigdir}/macros.d/macros.go-srpm
+%{_rpmluadir}/fedora/srpm/*.lua
+
+%files -n go-filesystem
+%dir %{gopath}
+%dir %{gopath}/src
+
+%files -n go-rpm-templates
+%license LICENSE-templates.txt
+%doc README.md
+# https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/51
+%dir %{dirname:%{_spectemplatedir}}
+%dir %{_spectemplatedir}
+%{_spectemplatedir}/*.spec
+
+%changelog
+* Tue Jan 18 2022 David Benoit <dbenoit@redhat.com> 3.0.9-9
+- Delete remove-fedora-dependency-automation.patch
+- Bundle golist in /usr/libexec
+- Related: rhbz#2043107
+
+* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com>
+- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
+  Related: rhbz#1991688
+
+* Tue Aug 03 2021 David Benoit <dbenoit@redhat.com> 3.0.9-7
+- Escape quotation marks in gobuildflags
+- Resolves: rhbz#1988717
+
+* Tue Jul 27 2021 David Benoit <dbenoit@redhat.com> 3.0.9-6
+- Remove arch conditional on gocompilerflags
+- Related: rhbz#1982298
+
+* Fri Jul 23 2021 David Benoit <dbenoit@redhat.com> 3.0.9-5
+- Remove fedora-specific Go dependency automation macros
+- Remove dependency on golist
+- Temporarily remove incompatible template spec files
+- Update gobuild flags
+- Resolves: rhbz#1982298
+
+* Thu Apr 15 2021 Mohan Boddu <mboddu@redhat.com>
+- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
+
+* Thu Feb 11 2021 Jeff Law  <law@redhat.com> - 3.0.9-3
+- Drop 32 bit arches in EL 9 (originally from Petr Sabata)
+
+* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.0.9-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Thu Aug 13 2020 Neal Gompa <ngompa13@gmail.com> - 3.0.9-1
+- Update to 3.0.9
+
+* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.0.8-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.0.8-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.0.8-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Wed Jun 05 2019 Nicolas Mailhot <nim@fedoraproject.org>
+- 3.0.8-3
+- initial Fedora import, for golist 0.10.0 and redhat-rpm-config 130