Setup variables for creation of rpms. It will define several
variables useful for creating rpms on a system where rpms are
supported. Currently, I requires changes to Makefile.am to
function properly (see the example below).
Also note that I do not use any non-UNIX OSs (and for the most
part, I only use RedHat), so this is probably generally not useful
for other systems.
Required setup:
In configure.in:
dnl For my rpm.m4 macros
RPM_RELEASE=1
AC_SUBST(RPM_RELEASE)
AM_RPM_INIT
dnl Enable or disable the rpm making rules in Makefile.am
AM_CONDITIONAL(MAKE_RPMS, test x$make_rpms = xtrue)
Furthermore, the %GNUconfigure rpm macro has a problem in that it
does not define CXXFLAGS for the target system correctly, so for
compiling C++ code, add the following line _before_ calling
AC_PROG_CXX:
dnl This is a little hack to make this work with rpm better (see mysql++.spec.in)
test -z "$CXXFLAGS" && CXXFLAGS="${CFLAGS}"
Changes to Makefile.am (I am trying to get rid of this step;
suggestions invited):
if MAKE_RPMS
rpm: @RPM_TARGET@
.PHONY: rpm
$(RPM_TARGET): $(DISTFILES)
${MAKE} dist
-mkdir -p $(RPM_DIR)/SRPMS
-mkdir -p `dirname $(RPM_TARGET)`
$(RPM_PROG) $(RPM_ARGS) $(RPM_TARBALL)
@echo Congratulations, $(RPM_TARGET) "(and friends)" should now exist.
else
endif
Also, it works best with a XXXX.spec.in file like the following
(this is way down on the wishlist, but a program to generate the
skeleton spec.in much like autoscan would just kick butt!):
---------- 8< ----------
# -*- Mode:rpm-spec -*-
# mysql++.spec.in
Summary: Your package description goes here
%define rel @RPM_RELEASE@
%define version @VERSION@
%define pkgname @PACKAGE@
%define prefix /usr
%define lt_release @LT_RELEASE@
%define lt_version @LT_CURRENT@.@LT_REVISION@.@LT_AGE@
# This is a hack until I can figure out how to better handle replacing
# autoconf macros... (gotta love autoconf...)
%define __aclocal aclocal || aclocal -I ./macros
%define configure_args @RPM_CONFIGURE_ARGS@
Name: %{pkgname}
Version: %{version}
Release: %{rel}
Copyright: LGPL
Group: # your group name goes here
Source: %{pkgname}-%{version}.tar.gz
Requires: # additional requirements
Buildroot: /tmp/%{pkgname}-root
URL: http://yoururl.go.here
Prefix: %{prefix}
BuildArchitectures: # Target platforms, i.e., i586
Packager: Your Name <youremail@your.address>
%description
Your package description
%changelog
%prep
%setup
#%patch
%build
%GNUconfigure %{configure_args}
# This is why we copy the CFLAGS to the CXXFLAGS in configure.in
# CFLAGS="%{optflags}" CXXFLAGS="%{optflags}" ./configure %{_target_platform} --prefix=%{prefix}
make
%install
# To make things work with BUILDROOT
if [ "$RPM_BUILD_ROOT" != "/tmp/%{pkgname}-root" ]
then
echo
echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
echo @ @
echo @ RPM_BUILD_ROOT is not what I expected. Please clean it yourself. @
echo @ @
echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
echo
else
echo Cleaning RPM_BUILD_ROOT: "$RPM_BUILD_ROOT"
rm -rf "$RPM_BUILD_ROOT"
fi
make DESTDIR="$RPM_BUILD_ROOT" install
%clean
# Call me paranoid, but I do not want to be responsible for nuking
# someone's harddrive!
if [ "$RPM_BUILD_ROOT" != "/tmp/%{pkgname}-root" ]
then
echo
echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
echo @ @
echo @ RPM_BUILD_ROOT is not what I expected. Please clean it yourself. @
echo @ @
echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
echo
else
echo Cleaning RPM_BUILD_ROOT: "$RPM_BUILD_ROOT"
rm -rf "$RPM_BUILD_ROOT"
fi
%files
%defattr(-, root, root)
# Your application file list goes here
# %{prefix}/lib/lib*.so*
%doc COPYRIGHT ChangeLog README AUTHORS NEWS
%doc doc/*
# If you install a library
%post -p /sbin/ldconfig
# If you install a library
%postun -p /sbin/ldconfig
%package devel
Summary: Development files for %{pkgname}
Group: Applications/Databases
%description devel
Development files for %{pkgname}.
%files devel
%defattr(-, root, root)
# Your development files go here
# Programmers documentation goes here
%doc doc
# end of file
---------- >8 ----------