Whamcloud - gitweb
LU-4319 build: Clean up rpms/srpm Make targets 26/8426/7
authorChristopher J. Morrone <morrone2@llnl.gov>
Wed, 27 Nov 2013 22:05:50 +0000 (14:05 -0800)
committerOleg Drokin <oleg.drokin@intel.com>
Mon, 17 Feb 2014 18:33:51 +0000 (18:33 +0000)
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 <morrone2@llnl.gov>
Signed-off-by: Dmitry Eremin <dmitry.eremin@intel.com>
Reviewed-on: http://review.whamcloud.com/8426
Tested-by: Jenkins
Reviewed-by: James Simmons <uja.ornl@gmail.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
autoMakefile.am
config/lustre-build.m4

index af3b2ae..96d3b39 100644 (file)
@@ -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
index 30f9c5c..be67e2d 100644 (file)
@@ -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