Toshaan Bharvani
2 years ago
commit
a39a8a65a5
3 changed files with 664 additions and 0 deletions
@ -0,0 +1,322 @@
@@ -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, "-"), "-") |
||||
+} |
||||
+ |
@ -0,0 +1,50 @@
@@ -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} %{?**}; |
||||
+} |
||||
+ |
@ -0,0 +1,292 @@
@@ -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 |
Loading…
Reference in new issue