From: Christopher J. Morrone Date: Wed, 27 Nov 2013 22:05:50 +0000 (-0800) Subject: LU-4319 build: Clean up rpms/srpm Make targets X-Git-Tag: 2.5.56~43 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=666c7580c8a6585479c5eecc316060a19142149d;hp=5afd3300d1ded80f79dbea92d47d287ad75f463a LU-4319 build: Clean up rpms/srpm Make targets The "rpms" and "srpm" targets were unnecessarily complicated. The rpms target in particular has a very long shell script embedded in the autoMakefile, which is not especially desirable. Because of the embedded shell script with its associated backslashes, we didn't use standard autoconf/automake macros because we didn't want shell comments to appear after line continuation. To get around that, we need another layer of variables to convert autoconf/automake variables into Make variables. It gets rather difficult to read and modify. Instead we move the scripting into autoconf m4 files, where scripting is much easier (little line continuations necessary, far fewer escapes needed). We also have direct access to the original variables, so we don't need to hop through two or three files before we eventually find where a variable gets set. All of the decisions are made at configure time anyway, so constructing the command line options for rpmbuild at configure time is the Right Thing to do. A nice side effect of this change is that one can now easily look at the autoMakefile after running "./configure" and see exactly the command line that will be passed to rpmbuild. Change-Id: I10fcfa740d9e901805615c2262263cc1ea8552bf Signed-off-by: Christopher J. Morrone Signed-off-by: Dmitry Eremin Reviewed-on: http://review.whamcloud.com/8426 Tested-by: Jenkins Reviewed-by: James Simmons Tested-by: Maloo Reviewed-by: Oleg Drokin --- diff --git a/autoMakefile.am b/autoMakefile.am index af3b2ae..96d3b39 100644 --- a/autoMakefile.am +++ b/autoMakefile.am @@ -1,19 +1,6 @@ SUBDIRS := @LDISKFS_SUBDIR@ . @LIBSYSIO_SUBDIR@ @SNMP_SUBDIR@ @LUSTREIOKIT_SUBDIR@ @LIBCFS_SUBDIR@ lnet lustre DIST_SUBDIRS := ldiskfs @SNMP_DIST_SUBDIR@ libsysio lustre-iokit @LIBCFS_SUBDIR@ lnet lustre config contrib -@TESTS_TRUE@BUILD_TESTS = true -@TESTS_FALSE@BUILD_TESTS = false -@SERVER_TRUE@BUILD_SERVER = true -@SERVER_FALSE@BUILD_SERVER = false -@CLIENT_TRUE@BUILD_CLIENT = true -@CLIENT_FALSE@BUILD_CLIENT = false -@LDISKFS_ENABLED_TRUE@BUILD_OSD_LDISKFS = true -@LDISKFS_ENABLED_FALSE@BUILD_OSD_LDISKFS = false -@ZFS_ENABLED_TRUE@BUILD_OSD_ZFS = true -@ZFS_ENABLED_FALSE@BUILD_OSD_ZFS = false -@BUILD_LUSTREIOKIT_TRUE@BUILD_LUSTREIOKIT = true -@BUILD_LUSTREIOKIT_FALSE@BUILD_LUSTREIOKIT = false - AUTOMAKE_OPTIONS = foreign FIND_TAG_FILES_CMD = find $(top_srcdir) \ @@ -100,73 +87,10 @@ EXTRA_DIST = @PACKAGE_TARNAME@.spec \ build/gen_filelist.sh rpms: @PACKAGE_TARNAME@.spec dist Makefile - @CONFIGURE_ARGS=""; \ - for arg in $(ac_configure_args); do \ - case $$arg in \ - --with-release=* ) ;; \ - --with-kmp-moddir=* ) ;; \ - --enable-tests | --disable-tests ) ;; \ - --with-linux=* | --with-linux-obj=* ) ;; \ - * ) CONFIGURE_ARGS="$$CONFIGURE_ARGS '$$arg'" ;; \ - esac; \ - done; \ - RPMARGS="--define \"configure_args $$CONFIGURE_ARGS\""; \ - if [ -n "@LINUX@" ]; then \ - RPMARGS="$$RPMARGS --define \"kdir @LINUX@\""; \ - if [ -n "@LINUX_OBJ@" -a "@LINUX_OBJ@" != "@LINUX@" ]; then \ - RPMARGS="$$RPMARGS --define \"kobjdir @LINUX_OBJ@\""; \ - fi; \ - fi; \ - if [ -n "@KMP_MODDIR@" ]; then \ - RPMARGS="$$RPMARGS --define \"kmoddir @KMP_MODDIR@\""; \ - fi; \ - if [ -n "@CROSS_PATH@" ]; then \ - if [[ "X$(BUILD_SERVER)" = Xtrue ]]; then \ - echo -e "\n" \ - "*** Don't support cross compilation for the Intel(R) Xeon Phi(TM) card.\n"; \ - exit 1; \ - fi; \ - CROSS_SUFFIX="-mic"; \ - RPMARGS="$$RPMARGS --define \"post_script build/gen_filelist.sh\""; \ - RPMARGS="$$RPMARGS --define \"cross_path @CROSS_PATH@\""; \ - RPMARGS="$$RPMARGS --define \"rootdir %{cross_path}\""; \ - RPMARGS="$$RPMARGS --define \"_prefix %{cross_path}/usr\""; \ - RPMARGS="$$RPMARGS --define \"_mandir %{_prefix}/share/man\""; \ - RPMARGS="$$RPMARGS --define \"_sysconfdir %{cross_path}/etc\""; \ - RPMARGS="$$RPMARGS --define \"make_args @CROSS_VARS@\""; \ - if [ "@CC_TARGET_ARCH@" = "x86_64-k1om-linux" ]; then \ - RPMARGS="$$RPMARGS --define \"cross_requires intel-mic-gpl\""; \ - fi; \ - fi; \ - if [[ "X$(BUILD_TESTS)" = Xfalse ]]; then \ - RPMARGS="$$RPMARGS --without lustre_tests"; \ - fi; \ - if [[ "X$(BUILD_SERVER)" = Xfalse ]]; then \ - RPMARGS="$$RPMARGS --without servers"; \ - if [ -n "$$CROSS_SUFFIX" ]; then \ - RPMARGS="$$RPMARGS --define \"lustre_name lustre-client$$CROSS_SUFFIX\""; \ - fi; \ - fi; \ - if [[ "X$(BUILD_OSD_LDISKFS)" = Xfalse ]]; then \ - RPMARGS="$$RPMARGS --without ldiskfs"; \ - fi; \ - if [[ "X$(BUILD_OSD_ZFS)" = Xtrue ]]; then \ - RPMARGS="$$RPMARGS --with zfs"; \ - fi; \ - if [[ "X$(BUILD_LUSTREIOKIT)" = Xfalse ]]; then \ - RPMARGS="$$RPMARGS --without lustre_iokit"; \ - fi; \ - echo "Building Lustre RPM with $$RPMARGS"; \ - eval rpmbuild $$RPMARGS -ta $(distdir).tar.gz + rpmbuild @RPMBUILD_BINARY_ARGS@ -ta $(distdir).tar.gz srpm: @PACKAGE_TARNAME@.spec dist Makefile - if [[ "X$(BUILD_TESTS)" = Xfalse ]]; then \ - RPMARGS="--without lustre_tests"; \ - fi; \ - if [[ "X$(BUILD_LUSTREIOKIT)" = Xfalse ]]; then \ - RPMARGS="$$RPMARGS --without lustre_iokit"; \ - fi; \ - eval rpmbuild $$RPMARGS -ts $(distdir).tar.gz + rpmbuild @RPMBUILD_SOURCE_ARGS@ -ts $(distdir).tar.gz # In the debs target, first make sure what's in the changelog reflects # the software version. Here's how we could dig the version out of the diff --git a/config/lustre-build.m4 b/config/lustre-build.m4 index 30f9c5c..be67e2d 100644 --- a/config/lustre-build.m4 +++ b/config/lustre-build.m4 @@ -629,6 +629,89 @@ AS_IF([test x$enable_server = xyes], ) ]) + +# +# LB_CONFIG_RPMBUILD_OPTIONS +# +# The purpose of this function is to assemble command line options +# for the rpmbuild command based on the options passed to the configure +# script, and also upon the descisions that configure makes based on +# the tests that it runs. +# These strings can be passed to rpmbuild on the command line +# in the Make targets named "rpms" and "srpm". +# +AC_DEFUN([LB_CONFIG_RPMBUILD_OPTIONS],[ + RPMBINARGS= + RPMSRCARGS= + CONFIGURE_ARGS= + eval set -- $ac_configure_args + for arg; do + case $arg in + --with-release=* ) ;; + --with-kmp-moddir=* ) ;; + --enable-tests | --disable-tests ) ;; + --with-linux=* | --with-linux-obj=* ) ;; + * ) CONFIGURE_ARGS="$CONFIGURE_ARGS '$arg'" ;; + esac + done + if test -n "$CONFIGURE_ARGS" ; then + RPMBINARGS="$RPMBINARGS --define \"configure_args $CONFIGURE_ARGS\"" + fi + if test -n "$LINUX" ; then + RPMBINARGS="$RPMBINARGS --define \"kdir $LINUX\"" + if test -n "$LINUX_OBJ" -a "$LINUX_OBJ" != x"$LINUX" ; then + RPMBINARGS="$RPMBINARGS --define \"kobjdir $LINUX_OBJ\"" + fi + fi + if test -n "$KMP_MODDIR" ; then + RPMBINARGS="$RPMBINARGS --define \"kmoddir $KMP_MODDIR\"" + fi + if test -n "$CROSS_PATH" ; then + if test x$enable_server = xyes ; then + echo -e "\n" + "*** Don't support cross compilation for the Intel(R) Xeon Phi(TM) card.\n" + exit 1 + fi + CROSS_SUFFIX="-mic" + RPMBINARGS="$RPMBINARGS --define \"post_script build/gen_filelist.sh\"" + RPMBINARGS="$RPMBINARGS --define \"cross_path $CROSS_PATH\"" + RPMBINARGS="$RPMBINARGS --define \"rootdir %{cross_path}\"" + RPMBINARGS="$RPMBINARGS --define \"_prefix %{cross_path}/usr\"" + RPMBINARGS="$RPMBINARGS --define \"_mandir %{_prefix}/share/man\"" + RPMBINARGS="$RPMBINARGS --define \"_sysconfdir %{cross_path}/etc\"" + RPMBINARGS="$RPMBINARGS --define \"make_args $CROSS_VARS\"" + if test x$CC_TARGET_ARCH = x"x86_64-k1om-linux" ; then + RPMBINARGS="$RPMBINARGS --define \"cross_requires intel-mic-gpl\"" + fi + fi + if test x$enable_tests != xyes ; then + RPMBINARGS="$RPMBINARGS --without lustre_tests" + RPMSRCARGS="$RPMSRCARGS --without lustre_tests"; + fi + if test x$enable_server != xyes ; then + RPMBINARGS="$RPMBINARGS --without servers" + if test -n "$CROSS_SUFFIX" ; then + RPMBINARGS="$RPMBINARGS --define \"lustre_name lustre-client$CROSS_SUFFIX\"" + fi + fi + if test x$enable_ldiskfs != xyes ; then + RPMBINARGS="$RPMBINARGS --without ldiskfs" + fi + if test x$enable_zfs = xyes ; then + RPMBINARGS="$RPMBINARGS --with zfs" + fi + if test x$enable_iokit != xyes ; then + RPMBINARGS="$RPMBINARGS --without lustre_iokit" + RPMSRCARGS="$RPMSRCARGS --without lustre_iokit" + fi + + RPMBUILD_BINARY_ARGS=$RPMBINARGS + RPMBUILD_SOURCE_ARGS=$RPMSRCARGS + + AC_SUBST(RPMBUILD_BINARY_ARGS) + AC_SUBST(RPMBUILD_SOURCE_ARGS) +]) + # # LB_CONFIGURE # @@ -700,6 +783,8 @@ AC_SUBST(ac_configure_args) MOSTLYCLEANFILES='.*.cmd .*.flags *.o *.ko *.mod.c .depend .*.1.* Modules.symvers Module.symvers' AC_SUBST(MOSTLYCLEANFILES) +LB_CONFIG_RPMBUILD_OPTIONS + AC_OUTPUT cat <<_ACEOF