Statically linking is discouraged. Although, there are situations in
which it is required. This commit includes some required dependency
checks to enable building a statically linked version of iprconfig. It
includes a new flag in the Autotools Build System,
'--enable-build-static' to support this option. To keep static linked
binary to a minimum inside iprutils, only iprconfig has a static
version in this patch.
This also includes a new subpackage in the spec file to hold the static
binary. To generate this subpackage, one must call rpmbuild passing
'--with static'. The static version will be installed as
'iprconfig-static' and will not conflict with iprutils package.
Be aware that static building requires the static version of ncurses and
glibc packages. Otherwise, iprconfig-static build will fail.
Since dependency order matters a lot when statically linking, this patch
depends heavily on my last fix, ("Fail on libncurses if ncurses-devel is
missing."), which is not upstream yet. I made sure this one will not
even apply cleanly without it. For testing purposes, make sure you have
that patch applied.
This was tested on F21, RHEL7x and SLES12.
Signed-off-by: Gabriel Krisman Bertazi <[email protected]>
---
Makefile.am | 8 ++++++++
configure.ac | 24 ++++++++++++++++++++++++
spec/iprutils.spec | 38 ++++++++++++++++++++++++++++++++++++--
3 files changed, 68 insertions(+), 2 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index daae8e5..d285399 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -29,6 +29,14 @@ iprinit_LDADD= libipr.la
iprdbg_SOURCES = iprdbg.c
iprdbg_LDADD= libipr.la
+if STATIC_BUILD
+sbin_PROGRAMS += iprconfig-static
+
+iprconfig_static_SOURCES = iprconfig.c iprconfig.h
+iprconfig_static_LDADD= libipr.la
+iprconfig_static_LDFLAGS=-all-static
+endif
+
dist_man_MANS = iprconfig.8 iprdump.8 iprinit.8 iprupdate.8 iprsos.8
SUBDIRS = . systemd init.d spec
diff --git a/configure.ac b/configure.ac
index 6fd7b93..71de904 100644
--- a/configure.ac
+++ b/configure.ac
@@ -24,7 +24,31 @@ if test -n ${ncurses_include}; then
CFLAGS="${CFLAGS} ${ncurses_include}"
fi
+AC_ARG_ENABLE([build_static],
+ [--enable-build-static Generate statically linked binaries],
+[case "${enableval}" in
+ yes)
+ build_static=true
+ CFLAGS="-static ${CFLAGS}"
+ ;;
+ no)
+ build_static=false
+ ;;
+ *)
+ AC_MSG_ERROR([bad value ${enableval} for --static])
+ ;;
+ esac], [build_static=false])
+AM_CONDITIONAL([STATIC_BUILD], [test "x${build_static}" = xtrue])
+
# Check for Libraries.
+if test "x${STATIC_BUILD_TRUE}" = "x"; then
+ AC_CHECK_LIB(dl, dlopen, [],
+ [AC_ERROR("glibc-static required")])
+ AC_CHECK_LIB(tinfo, tgetent, [],
+ [AC_ERROR("libtinfo not found.
+ It should be provided by ncurses")])
+fi
+
AC_CHECK_LIB([ncurses], [curses_version], [],
[AC_ERROR("libncurses not found.")])
AC_CHECK_LIB([form], [free_form], [], [AC_ERROR("libform not found.")])
diff --git a/spec/iprutils.spec b/spec/iprutils.spec
index c3af8c3..d002453 100644
--- a/spec/iprutils.spec
+++ b/spec/iprutils.spec
@@ -10,15 +10,37 @@ Source0: iprutils-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-root
BuildRequires: ncurses-devel python
+# Predicate whether we want to build -static package.
+%bcond_with static
+
%description
Provides a suite of utilities to manage and configure SCSI devices
supported by the ipr SCSI storage device driver.
+%if %{with static}
+%package static
+Summary: Static version of iprutils.
+%if 0%{?suse_version}
+BuildRequires: glibc-static
+%else
+BuildRequires: glibc-static ncurses-static
+%endif
+
+%description static
+Static version of some tools of iprutils.
+%endif # with_static
+
%prep
%setup -q -n %{name}-%{version}
%build
-%configure --sbindir=%{_sbindir} --libdir=%{_libdir}
+%configure --sbindir=%{_sbindir} --libdir=%{_libdir} \
+%if 0%{with static}
+ --enable-build-static=yes
+%else
+ --enable-build-static=no
+%endif #!with_static
+
make
%install
@@ -124,7 +146,12 @@ rm -rf %{_topdir}/BUILD%{name}
%files
%defattr(-,root,root)
-%{_sbindir}/*
+%{_sbindir}/iprconfig
+%{_sbindir}/iprdump
+%{_sbindir}/iprupdate
+%{_sbindir}/iprinit
+%{_sbindir}/iprdbg
+%{_sbindir}/iprsos
%{_includedir}/*
%{_libdir}/*
%{python_sitelib}/sos/plugins/*
@@ -142,6 +169,13 @@ rm -rf %{_topdir}/BUILD%{name}
%{_sysconfdir}/init.d/iprupdate
%endif
+%if 0%{with static}
+%files static
+
+%defattr(-,root,root)
+%{_sbindir}/iprconfig-static
+
+%endif #with_static
%changelog
* Wed May 6 2015 Brian King <[email protected]> 2.4.6
--
2.1.0
------------------------------------------------------------------------------
_______________________________________________
Iprdd-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/iprdd-devel