# Macros for Go module building. # # Copyright (c) 2011 Sascha Peilicke # %go_ver %(LC_ALL=C rpm -q --qf '%%{epoch}:%%{version}\\n' go | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not") %go_arch GOARCH %go_dir %{_libdir}/go %go_sitedir %{_libdir}/go/pkg %go_sitearch %{_libdir}/go/pkg/linux_%{go_arch} %go_requires %(echo '%*' | LC_ALL=C xargs -r rpm -q --qf 'Requires: %%{name} >= %%{epoch}:%%{version}\\n' | sed -e 's/ (none):/ /' -e 's/ 0:/ /' | grep -v "is not") %go_provides \ Provides: %{name}-devel = %{version} \ Provides: %{name}-devel-static = %{version} %go_disable_brp_strip_static_archive \ %define __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib/rpm/[^/]*/?brp-strip-static-archive %{__strip}!!g') %go_make \ install -d %{buildroot}%{_bindir} \ HOST_EXTRA_CFLAGS="%{optflags}" TARGDIR=%{buildroot}%{go_sitearch} GOBIN=%{buildroot}%{_bindir} gomake %go_make_install %{go_make} install %go_make_test %{go_make} test # "go install/build" expects valid $GOROOT for std library packages and potentially # a valid $GOPATH with the expected GOPATH structure. Third party librarys need # to be built with their "importpath" option exactly matching the expected import # statement. This is important because the importpath will be baked into the library's # type definitions at compile time. This means the package source must exist either # inside a valid GOPATH or a relative path to the source must match the 'importpath' # option when 'go install' is called. # # See "go help install/importpath/gopath" %goinstall() \ export GOPATH=%{_builddir}/go \ mkdir -p %{_builddir}/go/src/%1 && mkdir %{_builddir}/go/bin -p && mv ./* %{_builddir}/go/src/%1 \ mkdir -p %{_builddir}/go/pkg/linux_%{go_arch}/%1 \ cd ../ && rmdir %{_builddir}/%(basename %1) \ ln -s %{_builddir}/go/src/%1 %{_builddir}/%(basename %1) \ install -d %{buildroot}%{go_sitearch} \ install -d %{buildroot}%{_bindir} \ if [ %# -gt 1 ]; then \ if [ "%2" == "..." ]; then \ GOIMPORT=%1%2 \ else \ GOIMPORT=%1/%2 \ fi \ else \ GOIMPORT=%1 \ fi \ GOPATH=%{_builddir}/go go install -s -v -x -p 4 $GOIMPORT \ cp -arv %{_builddir}/go/pkg/linux_%{go_arch}/%1 %{buildroot}%{go_sitearch} \ TMPBIN=%{_builddir}/go/bin \ if [ "$(ls -A $TMPBIN)" ]; then \ install -m755 $TMPBIN/* %{buildroot}%{_bindir} \ fi \ %{nil} %gotest() \ if [ %# -gt 1 ]; then \ if [ "%2" == "..." ]; then \ GOIMPORT=%1%2 \ else \ GOIMPORT=%1/%2 \ fi \ else \ GOIMPORT=%1 \ fi \ GOPATH=%{_builddir}/go \ go test $GOIMPORT \ %{nil} %gofix() \ if [ %# -gt 1 ]; then \ if [ "%2" == "..." ]; then \ GOIMPORT=%1%2 \ else \ GOIMPORT=%1/%2 \ fi \ else \ GOIMPORT=%1 \ fi \ GOPATH=%{_builddir}/go \ go fix $GOIMPORT \ %{nil}