Prepare build system to produce RPMs

Add .spec file under extras/rpms and create targets to produce
source and binary rpms
This commit is contained in:
Renato Botelho do Couto 2017-12-05 07:27:59 -06:00
parent e7b1c0c38c
commit 1c187c5729
6 changed files with 135 additions and 7 deletions

2
.gitignore vendored
View file

@ -45,3 +45,5 @@ lib/src/build.c
lib/clixon/clixon.h lib/clixon/clixon.h
build-root/*.tar.xz build-root/*.tar.xz
build-root/*.rpm
build-root/rpmbuild

View file

@ -106,9 +106,9 @@ clean:
distclean: distclean:
rm -f Makefile TAGS config.status config.log *~ .depend rm -f Makefile TAGS config.status config.log *~ .depend
rm -rf Makefile autom4te.cache rm -rf autom4te.cache
rm -rf clixon.conf.cpp clixon.mk rm -rf clixon.conf.cpp clixon.mk build-root/rpmbuild
rm -f build-root/*.tar.xz rm -f build-root/*.tar.xz build-root/*.rpm extras/rpm/Makefile
for i in $(SUBDIRS) doc example docker; \ for i in $(SUBDIRS) doc example docker; \
do (cd $$i && $(MAKE) $(MFLAGS) $@); done do (cd $$i && $(MAKE) $(MFLAGS) $@); done
@ -145,6 +145,12 @@ dist:
@$(RM) $(BR)/clixon-latest.tar.xz @$(RM) $(BR)/clixon-latest.tar.xz
@ln -rs $(DIST_FILE).xz $(BR)/clixon-latest.tar.xz @ln -rs $(DIST_FILE).xz $(BR)/clixon-latest.tar.xz
pkg-rpm: dist
make -C extras/rpm
pkg-srpm: dist
make -C extras/rpm srpm
docker: docker:
for i in docker; \ for i in docker; \
do (cd $$i && $(MAKE) $(MFLAGS) $@); done do (cd $$i && $(MAKE) $(MFLAGS) $@); done

13
configure vendored
View file

@ -659,6 +659,7 @@ build_os
build_vendor build_vendor
build_cpu build_cpu
build build
CLIGEN_PREFIX
CLIGEN_VERSION CLIGEN_VERSION
CLIXON_VERSION_MINOR CLIXON_VERSION_MINOR
CLIXON_VERSION_MAJOR CLIXON_VERSION_MAJOR
@ -2158,6 +2159,11 @@ CLIXON_VERSION_PATCH="0"
CLIXON_VERSION="\"${CLIXON_VERSION_MAJOR}.${CLIXON_VERSION_MINOR}.${CLIXON_VERSION_PATCH}.PRE\"" CLIXON_VERSION="\"${CLIXON_VERSION_MAJOR}.${CLIXON_VERSION_MINOR}.${CLIXON_VERSION_PATCH}.PRE\""
# Fix to specific version (eg 3.5) or head (3) # Fix to specific version (eg 3.5) or head (3)
CLIGEN_VERSION="3" CLIGEN_VERSION="3"
if test "$prefix" = "NONE"; then
CLIGEN_PREFIX="$ac_default_prefix"
else
CLIGEN_PREFIX="$prefix"
fi
ac_config_headers="$ac_config_headers include/clixon_config.h lib/clixon/clixon.h" ac_config_headers="$ac_config_headers include/clixon_config.h lib/clixon/clixon.h"
@ -3560,6 +3566,7 @@ if test "${with_cligen}"; then
echo "Using CLIGEN here: ${with_cligen}" echo "Using CLIGEN here: ${with_cligen}"
CPPFLAGS="-I${with_cligen}/include ${CPPFLAGS}" CPPFLAGS="-I${with_cligen}/include ${CPPFLAGS}"
LDFLAGS="-L${with_cligen}/lib ${LDFLAGS}" LDFLAGS="-L${with_cligen}/lib ${LDFLAGS}"
test -d "$with_cligen" && CLIGEN_PREFIX="$with_cligen"
fi fi
@ -4328,11 +4335,8 @@ _ACEOF
# See also datastore/keyvalue/Makefile in with_keyvalue clause above # See also datastore/keyvalue/Makefile in with_keyvalue clause above
ac_config_files="$ac_config_files Makefile lib/Makefile lib/src/Makefile lib/clixon/Makefile apps/Makefile apps/cli/Makefile apps/backend/Makefile apps/netconf/Makefile apps/restconf/Makefile include/Makefile etc/Makefile etc/clixonrc example/Makefile example/docker/Makefile docker/Makefile docker/cli/Makefile docker/cli/Dockerfile docker/backend/Makefile docker/backend/Dockerfile docker/netconf/Makefile docker/netconf/Dockerfile datastore/Makefile datastore/text/Makefile yang/Makefile doc/Makefile" ac_config_files="$ac_config_files Makefile lib/Makefile lib/src/Makefile lib/clixon/Makefile apps/Makefile apps/cli/Makefile apps/backend/Makefile apps/netconf/Makefile apps/restconf/Makefile include/Makefile etc/Makefile etc/clixonrc example/Makefile example/docker/Makefile extras/rpm/Makefile docker/Makefile docker/cli/Makefile docker/cli/Dockerfile docker/backend/Makefile docker/backend/Dockerfile docker/netconf/Makefile docker/netconf/Dockerfile datastore/Makefile datastore/text/Makefile yang/Makefile doc/Makefile"
cat >confcache <<\_ACEOF cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure # This file is a shell script that caches the results of configure
@ -5040,6 +5044,7 @@ do
"etc/clixonrc") CONFIG_FILES="$CONFIG_FILES etc/clixonrc" ;; "etc/clixonrc") CONFIG_FILES="$CONFIG_FILES etc/clixonrc" ;;
"example/Makefile") CONFIG_FILES="$CONFIG_FILES example/Makefile" ;; "example/Makefile") CONFIG_FILES="$CONFIG_FILES example/Makefile" ;;
"example/docker/Makefile") CONFIG_FILES="$CONFIG_FILES example/docker/Makefile" ;; "example/docker/Makefile") CONFIG_FILES="$CONFIG_FILES example/docker/Makefile" ;;
"extras/rpm/Makefile") CONFIG_FILES="$CONFIG_FILES extras/rpm/Makefile" ;;
"docker/Makefile") CONFIG_FILES="$CONFIG_FILES docker/Makefile" ;; "docker/Makefile") CONFIG_FILES="$CONFIG_FILES docker/Makefile" ;;
"docker/cli/Makefile") CONFIG_FILES="$CONFIG_FILES docker/cli/Makefile" ;; "docker/cli/Makefile") CONFIG_FILES="$CONFIG_FILES docker/cli/Makefile" ;;
"docker/cli/Dockerfile") CONFIG_FILES="$CONFIG_FILES docker/cli/Dockerfile" ;; "docker/cli/Dockerfile") CONFIG_FILES="$CONFIG_FILES docker/cli/Dockerfile" ;;

View file

@ -47,6 +47,11 @@ CLIXON_VERSION_PATCH="0"
CLIXON_VERSION="\"${CLIXON_VERSION_MAJOR}.${CLIXON_VERSION_MINOR}.${CLIXON_VERSION_PATCH}.PRE\"" CLIXON_VERSION="\"${CLIXON_VERSION_MAJOR}.${CLIXON_VERSION_MINOR}.${CLIXON_VERSION_PATCH}.PRE\""
# Fix to specific version (eg 3.5) or head (3) # Fix to specific version (eg 3.5) or head (3)
CLIGEN_VERSION="3" CLIGEN_VERSION="3"
if test "$prefix" = "NONE"; then
CLIGEN_PREFIX="$ac_default_prefix"
else
CLIGEN_PREFIX="$prefix"
fi
AC_CONFIG_HEADERS([include/clixon_config.h lib/clixon/clixon.h]) AC_CONFIG_HEADERS([include/clixon_config.h lib/clixon/clixon.h])
@ -62,6 +67,7 @@ AC_SUBST(CLIXON_VERSION_STRING)
AC_SUBST(CLIXON_VERSION_MAJOR) AC_SUBST(CLIXON_VERSION_MAJOR)
AC_SUBST(CLIXON_VERSION_MINOR) AC_SUBST(CLIXON_VERSION_MINOR)
AC_SUBST(CLIGEN_VERSION) # Bind to specific CLIgen version AC_SUBST(CLIGEN_VERSION) # Bind to specific CLIgen version
AC_SUBST(CLIGEN_PREFIX)
AC_MSG_RESULT(CLIXON version is ${CLIXON_VERSION}) AC_MSG_RESULT(CLIXON version is ${CLIXON_VERSION})
@ -122,6 +128,7 @@ if test "${with_cligen}"; then
echo "Using CLIGEN here: ${with_cligen}" echo "Using CLIGEN here: ${with_cligen}"
CPPFLAGS="-I${with_cligen}/include ${CPPFLAGS}" CPPFLAGS="-I${with_cligen}/include ${CPPFLAGS}"
LDFLAGS="-L${with_cligen}/lib ${LDFLAGS}" LDFLAGS="-L${with_cligen}/lib ${LDFLAGS}"
test -d "$with_cligen" && CLIGEN_PREFIX="$with_cligen"
fi fi
AC_CHECK_HEADERS(cligen/cligen.h,, AC_MSG_ERROR(cligen missing. Try: git clone https://github.com/olofhagsand/cligen.git)) AC_CHECK_HEADERS(cligen/cligen.h,, AC_MSG_ERROR(cligen missing. Try: git clone https://github.com/olofhagsand/cligen.git))
@ -213,6 +220,7 @@ AC_OUTPUT(Makefile
etc/clixonrc etc/clixonrc
example/Makefile example/Makefile
example/docker/Makefile example/docker/Makefile
extras/rpm/Makefile
docker/Makefile docker/Makefile
docker/cli/Makefile docker/cli/Makefile
docker/cli/Dockerfile docker/cli/Dockerfile

35
extras/rpm/Makefile.in Normal file
View file

@ -0,0 +1,35 @@
TARBALL=$(shell realpath ../../build-root/clixon-latest.tar.xz)
BASENAME=$(shell basename $(TARBALL) | sed -e s/.tar.\*//)
VERSION=$(shell echo $(BASENAME) | cut -f2 -d-)
RELEASE=$(shell echo $(BASENAME) | cut -f3- -d- | sed -e s/-/_/g)
BR=$(shell realpath $(CURDIR)/../../build-root)
RPMBUILD=$(BR)/rpmbuild
all: RPM
spec:
@echo $(TARBALL)
mkdir -p $(RPMBUILD)/{RPMS,SRPMS,BUILD,SOURCES,SPECS}
cp $(TARBALL) $(RPMBUILD)/SOURCES/clixon-$(VERSION)-$(RELEASE).tar.xz
cp clixon.spec $(RPMBUILD)/SPECS
srpm: spec
rpmbuild -bs \
--define "cligen_prefix @CLIGEN_PREFIX@" \
--define "_topdir $(RPMBUILD)" \
--define "_version $(VERSION)" \
--define "_release $(RELEASE)" \
$(RPMBUILD)/SPECS/clixon.spec
mv $$(find $(RPMBUILD)/SRPMS -name \*.src.rpm -type f) $(BR)
# Define DEVELOPER environmrnt variable to prevent .spec to add cligent to the
# list of build requirements
RPM: spec
rpmbuild -bb \
--define "cligen_prefix @CLIGEN_PREFIX@" \
$${DEVELOPER:+--define "developer yes"} \
--define "_topdir $(RPMBUILD)" \
--define "_version $(VERSION)" \
--define "_release $(RELEASE)" \
$(RPMBUILD)/SPECS/clixon.spec
mv $$(find $(RPMBUILD)/RPMS -name \*.rpm -type f) $(BR)

72
extras/rpm/clixon.spec Normal file
View file

@ -0,0 +1,72 @@
%{!?_topdir: %define _topdir %(pwd)}
%{!?cligen_prefix: %define cligen_prefix %{_prefix}}
Name: clixon
Version: %{_version}
Release: %{_release}
Summary: The XML-based command line processing tool CLIXON
Group: System Environment/Libraries
License: ASL 2.0 or GPLv2
URL: http://www.clicon.org
AutoReq: no
BuildRequires: flex, bison
Requires: cligen, fcgi
# Sometimes developers want to build it without installing cligen but passing
# path using --with-cligen and pointing it to cligen buildroot. Use %{developer}
# macro for these cases
%if 0%{!?developer:1}
BuildRequires: cligen
%endif
Source: %{name}-%{version}-%{release}.tar.xz
%description
The XML-based command line processing tool CLIXON.
%package devel
Summary: CLIXON header files
Group: Development/Libraries
Requires: clixon
%description devel
This package contains header files for CLIXON.
%prep
%setup
%build
%configure --with-cligen=%{cligen_prefix} --without-keyvalue
make
%install
make DESTDIR=${RPM_BUILD_ROOT} install install-include
%files
%{_libdir}/*
%{_bindir}/*
%{_sbindir}/*
#%{_sysconfdir}/*
%{_datadir}/%{name}/*
/www-data/clixon_restconf
%files devel
%{_includedir}/%{name}/*
%clean
%post
/sbin/ldconfig
caps="cap_setuid,cap_fowner,cap_chown,cap_dac_override"
caps="${caps},cap_kill,cap_net_admin,cap_net_bind_service"
caps="${caps},cap_net_broadcast,cap_net_raw"
if [ -x /usr/sbin/setcap ]; then
/usr/sbin/setcap ${caps}=ep %{_bindir}/clixon_cli
/usr/sbin/setcap ${caps}=ep %{_bindir}/clixon_netconf
/usr/sbin/setcap ${caps}=ep %{_sbindir}/clixon_backend
fi
%postun
/sbin/ldconfig