Macros by Category | Revision History |
AM_RPM_INIT
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 ----------
http://autoconf-archive.cryp.to/am_rpm_init.m4
Copyright © 2008 Dale K. Hawkins <dhawkins@cdrgts.com>
Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved.