dnl @synopsis AM_RPM_INIT dnl dnl Setup variables for creation of rpms. It will define several dnl variables useful for creating rpms on a system where rpms are dnl supported. Currently, I requires changes to Makefile.am to dnl function properly (see the example below). dnl dnl Also note that I do not use any non-UNIX OSs (and for the most dnl part, I only use RedHat), so this is probably generally not useful dnl for other systems. dnl dnl Required setup: dnl dnl In configure.in: dnl dnl dnl For my rpm.m4 macros dnl RPM_RELEASE=1 dnl AC_SUBST(RPM_RELEASE) dnl dnl AM_RPM_INIT dnl dnl Enable or disable the rpm making rules in Makefile.am dnl AM_CONDITIONAL(MAKE_RPMS, test x$make_rpms = xtrue) dnl dnl Furthermore, the %GNUconfigure rpm macro has a problem in that it dnl does not define CXXFLAGS for the target system correctly, so for dnl compiling C++ code, add the following line _before_ calling dnl AC_PROG_CXX: dnl dnl dnl This is a little hack to make this work with rpm better (see mysql++.spec.in) dnl test -z "$CXXFLAGS" && CXXFLAGS="${CFLAGS}" dnl dnl Changes to Makefile.am (I am trying to get rid of this step; dnl suggestions invited): dnl dnl if MAKE_RPMS dnl rpm: @RPM_TARGET@ dnl dnl .PHONY: rpm dnl dnl $(RPM_TARGET): $(DISTFILES) dnl ${MAKE} dist dnl -mkdir -p $(RPM_DIR)/SRPMS dnl -mkdir -p `dirname $(RPM_TARGET)` dnl $(RPM_PROG) $(RPM_ARGS) $(RPM_TARBALL) dnl @echo Congratulations, $(RPM_TARGET) "(and friends)" should now exist. dnl else dnl endif dnl dnl Also, it works best with a XXXX.spec.in file like the following dnl (this is way down on the wishlist, but a program to generate the dnl skeleton spec.in much like autoscan would just kick butt!): dnl dnl ---------- 8< ---------- dnl # -*- Mode:rpm-spec -*- dnl # mysql++.spec.in dnl Summary: Your package description goes here dnl %define rel @RPM_RELEASE@ dnl dnl %define version @VERSION@ dnl %define pkgname @PACKAGE@ dnl %define prefix /usr dnl dnl %define lt_release @LT_RELEASE@ dnl %define lt_version @LT_CURRENT@.@LT_REVISION@.@LT_AGE@ dnl dnl # This is a hack until I can figure out how to better handle replacing dnl # autoconf macros... (gotta love autoconf...) dnl %define __aclocal aclocal || aclocal -I ./macros dnl %define configure_args @RPM_CONFIGURE_ARGS@ dnl dnl Name: %{pkgname} dnl Version: %{version} dnl Release: %{rel} dnl dnl Copyright: LGPL dnl Group: # your group name goes here dnl Source: %{pkgname}-%{version}.tar.gz dnl Requires: # additional requirements dnl Buildroot: /tmp/%{pkgname}-root dnl URL: http://yoururl.go.here dnl Prefix: %{prefix} dnl BuildArchitectures: # Target platforms, i.e., i586 dnl Packager: Your Name dnl dnl %description dnl Your package description dnl dnl %changelog dnl dnl %prep dnl %setup dnl #%patch dnl dnl %build dnl %GNUconfigure %{configure_args} dnl # This is why we copy the CFLAGS to the CXXFLAGS in configure.in dnl # CFLAGS="%{optflags}" CXXFLAGS="%{optflags}" ./configure %{_target_platform} --prefix=%{prefix} dnl make dnl dnl %install dnl # To make things work with BUILDROOT dnl if [ "$RPM_BUILD_ROOT" != "/tmp/%{pkgname}-root" ] dnl then dnl echo dnl echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ dnl echo @ @ dnl echo @ RPM_BUILD_ROOT is not what I expected. Please clean it yourself. @ dnl echo @ @ dnl echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ dnl echo dnl else dnl echo Cleaning RPM_BUILD_ROOT: "$RPM_BUILD_ROOT" dnl rm -rf "$RPM_BUILD_ROOT" dnl fi dnl make DESTDIR="$RPM_BUILD_ROOT" install dnl dnl %clean dnl # Call me paranoid, but I do not want to be responsible for nuking dnl # someone's harddrive! dnl if [ "$RPM_BUILD_ROOT" != "/tmp/%{pkgname}-root" ] dnl then dnl echo dnl echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ dnl echo @ @ dnl echo @ RPM_BUILD_ROOT is not what I expected. Please clean it yourself. @ dnl echo @ @ dnl echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ dnl echo dnl else dnl echo Cleaning RPM_BUILD_ROOT: "$RPM_BUILD_ROOT" dnl rm -rf "$RPM_BUILD_ROOT" dnl fi dnl dnl %files dnl %defattr(-, root, root) dnl # Your application file list goes here dnl # %{prefix}/lib/lib*.so* dnl %doc COPYRIGHT ChangeLog README AUTHORS NEWS dnl %doc doc/* dnl dnl # If you install a library dnl %post -p /sbin/ldconfig dnl dnl # If you install a library dnl %postun -p /sbin/ldconfig dnl dnl %package devel dnl Summary: Development files for %{pkgname} dnl Group: Applications/Databases dnl %description devel dnl Development files for %{pkgname}. dnl dnl %files devel dnl %defattr(-, root, root) dnl # Your development files go here dnl # Programmers documentation goes here dnl %doc doc dnl dnl # end of file dnl ---------- >8 ---------- dnl dnl @version $Id: am_rpm_init.m4,v 1.1.1.1 2001/07/26 00:46 ac-archive-0.5.39 $ dnl @author Dale K. Hawkins dnl AM_RPM_INIT dnl Figure out how to create rpms for this system and setup for an dnl automake target AC_DEFUN([AM_RPM_INIT], [dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl Find the RPM program AC_ARG_WITH(rpm-prog,[ --with-rpm-prog=PROG Which rpm to use (optional)], rpm_prog="$withval", rpm_prog="") AC_ARG_ENABLE(rpm-rules, [ --enable-rpm-rules Try to create rpm make rules (defaults to yes for Linux)], enable_rpm_rules="$withval",enable_rpm_rules=no) AC_ARG_WITH(rpm-extra-args, [ --with-rpm-extra-args=ARGS Run rpm with extra arguments (defaults to none)], rpm_extra_args="$withval", rpm_extra_args="") dnl AC_ARG_ENABLE(rpm-topdir, [ --enable-rpm Try to create rpm make rules (defaults to yes for Linux)], dnl enable_rpm_rules="$withval",no) dnl echo enable_rpm_rules is $enable_rpm_rules dnl echo rpm_prog is $rpm_prog RPM_TARGET="" if test x$enable_rpm_rules = xno ; then echo "Not trying to build rpms for your system (use --enable-rpm-rules to override) " no_rpm=yes else if test x$rpm_prog != x ; then if test x${RPM_PROG+set} != xset ; then RPM_PROG=$rpm_prog fi fi AC_PATH_PROG(RPM_PROG, rpm, no) no_rpm=no if test "$RPM_PROG" = "no" ; then echo *** RPM Configuration Failed echo *** Failed to find the rpm program. If you want to build rpm packages echo *** indicate the path to the rpm program using --with-rpm-prog=PROG no_rpm=yes RPM_MAKE_RULES="" else AC_MSG_CHECKING(how rpm sets %{_rpmdir}) rpmdir=`rpm --eval %{_rpmdir}` if test x$rpmdir = x"%{_rpmdir}" ; then AC_MSG_RESULT([not set (cannot build rpms?)]) echo *** Could not determine the value of %{_rpmdir} echo *** This could be because it is not set, or your version of rpm does not set it echo *** It must be set in order to generate the correct rpm generation commands echo *** echo *** You might still be able to create rpms, but I could not automate it for you echo *** BTW, if you know this is wrong, please help to improve the rpm.m4 module echo *** Send corrections, updates and fixes to dhawkins@cdrgts.com. Thanks. else AC_MSG_RESULT([$rpmdir]) fi AC_MSG_CHECKING(how rpm sets %{_rpmfilename}) rpmfilename=$rpmdir/`rpm --eval %{_rpmfilename} | sed "s/%{ARCH}/${host_cpu}/g" | sed "s/%{NAME}/$PACKAGE/g" | sed "s/%{VERSION}/${VERSION}/g" | sed "s/%{RELEASE}/${RPM_RELEASE}/g"` AC_MSG_RESULT([$rpmfilename]) RPM_DIR=${rpmdir} RPM_TARGET=$rpmfilename RPM_ARGS="-ta $rpm_extra_args" RPM_TARBALL=${PACKAGE}-${VERSION}.tar.gz fi fi case "${no_rpm}" in yes) make_rpms=false;; no) make_rpms=true;; *) AC_MSG_WARN([bad value ${no_rpm} for no_rpm (not making rpms)]) make_rpms=false;; esac AC_SUBST(RPM_DIR) AC_SUBST(RPM_TARGET) AC_SUBST(RPM_ARGS) AC_SUBST(RPM_TARBALL) RPM_CONFIGURE_ARGS=${ac_configure_args} AC_SUBST(RPM_CONFIGURE_ARGS) ])