Re: [PATCH v4] Code to allow cros-compilation on chromeOS

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On Wed, Apr 19, 2017 at 04:33:48PM -0700, Gwendal Grignou wrote:
> - Request LIBTOOL to be used
> - Set topbuildir based on a Makefile variable to call libtool
> - Use /usr/local instead of /var for xfstest final location
> - Move macros from aclocal.m4 to acinclude.m4, aclocal.m4 is autogenerated.
> - Use autoconf variables @prefix@, @exec_prefix@.
> 
> The regular way of compiling xfstests - make - remains.
> But it now runs autoreconf and libtoolize -i to produce a valid
> configure.
> Verified with 'make install --dry-run' that files are installed at the
> same place.
> Verified compiling in chromeOS chroot works as well.
> 
> Signed-off-by: Gwendal Grignou <gwendal@xxxxxxxxxxxx>
> ---
> 
> Changes in v2:
> Removal of instal-sh, use of autoreconf
> 
> Changes in v3:
> Use of @exec_prefix@ variable, unify installation location.
> 
> Changes in v4:
> Add --install option to autoreconf so that aclocal is called with -I m4.
> Keep using AC_CONFIG_MACRO_DIR when autoconf is called directly.
> With --install option and AC_CONFIG_MACRO_DIR undefined verify that configure
> still works.

Thanks a lot for the update! v4 works for me too with RHEL6, RHEL7 and
Fedora 25 hosts.

If all the following changes look OK to you and there're no new comments
from other reviewers on the list, I'm going to push this patch to
upstream this week. So please shout out loud if anyone has any complains :)
(new patch attached)

First, I updated the patch a bit to resolve the merge conflicts with
commit b34b378 src/open_by_handle: program to exercise
open_by_handle_at() syscall, added open_by_handle_at detection in
acinclude.m4

> 
>  Makefile             |   7 +-
>  acinclude.m4         |  30 ++++++
>  aclocal.m4           |  50 ----------
>  configure.ac         |   3 +-
>  include/builddefs.in |   9 +-
>  install-sh           | 259 ---------------------------------------------------
>  6 files changed, 41 insertions(+), 317 deletions(-)
>  create mode 100644 acinclude.m4
>  delete mode 100644 aclocal.m4
>  delete mode 100755 install-sh
> 
> diff --git a/Makefile b/Makefile
> index 30d8747d..d41750ab 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -76,12 +76,13 @@ clean:  # if configure hasn't run, nothing to clean
>  endif
>  
>  configure: configure.ac
> -	autoheader
> -	autoconf
> +	autoreconf --include=m4
> +	libtoolize -i

Second. This creates some new untracked files, I'd like to add them to
.gitignore too and remove them by running "make realclean", so I made
the following changes.

--- a/.gitignore
+++ b/.gitignore
@@ -9,10 +9,23 @@
 /results
 
 # autoconf generated files
+/aclocal.m4
 /autom4te.cache
 /configure
+/config.guess
 /config.log
 /config.status
+/config.sub
+/m4/libtool.m4
+/m4/ltoptions.m4
+/m4/ltsugar.m4
+/m4/ltversion.m4
+/m4/lt~obsolete.m4
+
+# libtool
+/libtool
+/install-sh
+/ltmain.sh

 # build system
 /include/builddefs
diff --git a/Makefile b/Makefile
index 30d8747..ebf5c03 100644
--- a/Makefile
+++ b/Makefile
@@ -41,10 +41,13 @@ endif

 SRCTAR = $(PKG_NAME)-$(PKG_VERSION).tar.gz

-CONFIGURE = configure include/builddefs include/config.h
+CONFIGURE = configure include/builddefs include/config.h \
+           aclocal.m4 config.guess config.sub install-sh ltmain.sh \
+           m4/libtool.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 \
+           m4/lt~obsolete.m4
 LSRCFILES = configure configure.ac aclocal.m4 README VERSION
 LDIRT = config.log .ltdep .dep config.status config.cache confdefs.h \
-       conftest* check.log check.time
+       conftest* check.log check.time libtool

 ifeq ($(HAVE_BUILDDEFS), yes)
 LDIRT += $(SRCTAR)


Thanks again!

Eryu
>From ee2e2e29533220c8e40c667c53a3302394e087fb Mon Sep 17 00:00:00 2001
From: Gwendal Grignou <gwendal@xxxxxxxxxxxx>
Date: Wed, 19 Apr 2017 16:33:48 -0700
Subject: [PATCH] build: Code to allow cros-compilation on chromeOS

- Request LIBTOOL to be used
- Set topbuildir based on a Makefile variable to call libtool
- Use /usr/local instead of /var for xfstest final location
- Move macros from aclocal.m4 to acinclude.m4, aclocal.m4 is autogenerated.
- Use autoconf variables @prefix@, @exec_prefix@.

The regular way of compiling xfstests - make - remains.
But it now runs autoreconf and libtoolize -i to produce a valid
configure.
Verified with 'make install --dry-run' that files are installed at the
same place.
Verified compiling in chromeOS chroot works as well.

[eguan: resolve merge conflicts and update .gitignore and remove
generated files by realclean]

Signed-off-by: Gwendal Grignou <gwendal@xxxxxxxxxxxx>
Reviewed-by: Eryu Guan <eguan@xxxxxxxxxx>
Signed-off-by: Eryu Guan <eguan@xxxxxxxxxx>
---
 .gitignore           |  13 +++
 Makefile             |  14 ++-
 acinclude.m4         |  45 +++++++++
 aclocal.m4           |  65 -------------
 configure.ac         |   3 +-
 include/builddefs.in |   9 +-
 install-sh           | 259 ---------------------------------------------------
 7 files changed, 74 insertions(+), 334 deletions(-)
 create mode 100644 acinclude.m4
 delete mode 100644 aclocal.m4
 delete mode 100755 install-sh

diff --git a/.gitignore b/.gitignore
index ded4a61..c049bef 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,10 +9,23 @@
 /results
 
 # autoconf generated files
+/aclocal.m4
 /autom4te.cache
 /configure
+/config.guess
 /config.log
 /config.status
+/config.sub
+/m4/libtool.m4
+/m4/ltoptions.m4
+/m4/ltsugar.m4
+/m4/ltversion.m4
+/m4/lt~obsolete.m4
+
+# libtool
+/libtool
+/install-sh
+/ltmain.sh
 
 # build system
 /include/builddefs
diff --git a/Makefile b/Makefile
index 30d8747..ebf5c03 100644
--- a/Makefile
+++ b/Makefile
@@ -41,10 +41,13 @@ endif
 
 SRCTAR = $(PKG_NAME)-$(PKG_VERSION).tar.gz
 
-CONFIGURE = configure include/builddefs include/config.h
+CONFIGURE = configure include/builddefs include/config.h \
+	    aclocal.m4 config.guess config.sub install-sh ltmain.sh \
+	    m4/libtool.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 \
+	    m4/lt~obsolete.m4
 LSRCFILES = configure configure.ac aclocal.m4 README VERSION
 LDIRT = config.log .ltdep .dep config.status config.cache confdefs.h \
-	conftest* check.log check.time
+	conftest* check.log check.time libtool
 
 ifeq ($(HAVE_BUILDDEFS), yes)
 LDIRT += $(SRCTAR)
@@ -76,12 +79,13 @@ clean:  # if configure hasn't run, nothing to clean
 endif
 
 configure: configure.ac
-	autoheader
-	autoconf
+	autoreconf --include=m4
+	libtoolize -i
 
 include/builddefs include/config.h: configure
 	./configure \
-                --libexecdir=/usr/lib
+                --libexecdir=/usr/lib \
+                --exec_prefix=/var/lib
 
 aclocal.m4::
 	aclocal --acdir=`pwd`/m4 --output=$@
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 0000000..a605c01
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,45 @@
+dnl Copyright (C) 2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+AC_DEFUN([AC_PACKAGE_WANT_LINUX_FIEMAP_H],
+  [ AC_CHECK_HEADERS([linux/fiemap.h], [ have_fiemap=true ], [ have_fiemap=false ])
+    AC_SUBST(have_fiemap)
+  ])
+
+AC_DEFUN([AC_PACKAGE_WANT_LINUX_PRCTL_H],
+  [ AC_CHECK_HEADERS([sys/prctl.h], [ have_prctl=true ], [ have_prctl=false ])
+    AC_SUBST(have_prctl)
+  ])
+
+AC_DEFUN([AC_PACKAGE_WANT_LINUX_FS_H],
+  [ AC_CHECK_HEADER([linux/fs.h])
+  ])
+
+AC_DEFUN([AC_PACKAGE_WANT_FALLOCATE],
+  [ AC_MSG_CHECKING([for fallocate])
+    AC_TRY_LINK([
+#define _GNU_SOURCE
+#define _FILE_OFFSET_BITS 64
+#include <fcntl.h>
+#include <linux/falloc.h> ],
+      [ fallocate(0, 0, 0, 0); ],
+      [ have_fallocate=true; AC_MSG_RESULT(yes) ],
+      [ have_fallocate=false; AC_MSG_RESULT(no) ])
+    AC_SUBST(have_fallocate)
+  ])
+
+AC_DEFUN([AC_PACKAGE_WANT_OPEN_BY_HANDLE_AT],
+  [ AC_MSG_CHECKING([for open_by_handle_at])
+    AC_TRY_LINK([
+#define _GNU_SOURCE
+#include <fcntl.h>
+      ],
+      [
+          struct file_handle fh;
+          open_by_handle_at(0, &fh, 0);
+      ],
+      [ have_open_by_handle_at=true; AC_MSG_RESULT(yes) ],
+      [ have_open_by_handle_at=false; AC_MSG_RESULT(no) ])
+    AC_SUBST(have_open_by_handle_at)
+  ])
diff --git a/aclocal.m4 b/aclocal.m4
deleted file mode 100644
index 829fa10..0000000
--- a/aclocal.m4
+++ /dev/null
@@ -1,65 +0,0 @@
-# generated automatically by aclocal 1.11 -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-AC_DEFUN([AC_PACKAGE_WANT_LINUX_FIEMAP_H],
-  [ AC_CHECK_HEADERS([linux/fiemap.h], [ have_fiemap=true ], [ have_fiemap=false ])
-    AC_SUBST(have_fiemap)
-  ])
-
-AC_DEFUN([AC_PACKAGE_WANT_LINUX_PRCTL_H],
-  [ AC_CHECK_HEADERS([sys/prctl.h], [ have_prctl=true ], [ have_prctl=false ])
-    AC_SUBST(have_prctl)
-  ])
-
-AC_DEFUN([AC_PACKAGE_WANT_LINUX_FS_H],
-  [ AC_CHECK_HEADER([linux/fs.h])
-  ])
-
-AC_DEFUN([AC_PACKAGE_WANT_FALLOCATE],
-  [ AC_MSG_CHECKING([for fallocate])
-    AC_TRY_LINK([
-#define _GNU_SOURCE
-#define _FILE_OFFSET_BITS 64
-#include <fcntl.h>
-#include <linux/falloc.h> ],
-      [ fallocate(0, 0, 0, 0); ],
-      [ have_fallocate=true; AC_MSG_RESULT(yes) ],
-      [ have_fallocate=false; AC_MSG_RESULT(no) ])
-    AC_SUBST(have_fallocate)
-  ])
-
-AC_DEFUN([AC_PACKAGE_WANT_OPEN_BY_HANDLE_AT],
-  [ AC_MSG_CHECKING([for open_by_handle_at])
-    AC_TRY_LINK([
-#define _GNU_SOURCE
-#include <fcntl.h>
-      ],
-      [
-          struct file_handle fh;
-          open_by_handle_at(0, &fh, 0);
-      ],
-      [ have_open_by_handle_at=true; AC_MSG_RESULT(yes) ],
-      [ have_open_by_handle_at=false; AC_MSG_RESULT(no) ])
-    AC_SUBST(have_open_by_handle_at)
-  ])
-m4_include([m4/multilib.m4])
-m4_include([m4/package_acldev.m4])
-m4_include([m4/package_aiodev.m4])
-m4_include([m4/package_attrdev.m4])
-m4_include([m4/package_dmapidev.m4])
-m4_include([m4/package_gdbmdev.m4])
-m4_include([m4/package_globals.m4])
-m4_include([m4/package_ssldev.m4])
-m4_include([m4/package_utilies.m4])
-m4_include([m4/package_uuiddev.m4])
-m4_include([m4/package_xfslibs.m4])
diff --git a/configure.ac b/configure.ac
index 1285bf4..5ddaadc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,6 @@
 AC_INIT([xfstests], [1.1.1])
-AC_PREREQ(2.50)
+AC_CONFIG_MACRO_DIR([m4])
+LT_INIT
 AC_CONFIG_SRCDIR([src/xfsctl.c])
 AC_PACKAGE_GLOBALS(xfstests)
 AC_PACKAGE_UTILITIES(xfstests)
diff --git a/include/builddefs.in b/include/builddefs.in
index 2725037..952a3e0 100644
--- a/include/builddefs.in
+++ b/include/builddefs.in
@@ -7,6 +7,8 @@
 ifndef _BUILDDEFS_INCLUDED_
 _BUILDDEFS_INCLUDED_ = 1
 
+top_builddir=$(TOPDIR)
+
 DEBUG = @debug_build@
 OPTIMIZER = @opt_build@
 MALLOCLIB = @malloc_lib@
@@ -24,6 +26,7 @@ LIBUUID = @libuuid@
 LIBHANDLE = @libhdl@
 LIBDM = @libdm@
 LIBTEST = $(TOPDIR)/lib/libtest.la
+prefix = @prefix@
 
 PKG_NAME        = @pkg_name@
 PKG_USER        = @pkg_user@
@@ -32,10 +35,8 @@ PKG_RELEASE     = @pkg_release@
 PKG_VERSION     = @pkg_version@
 PKG_PLATFORM    = @pkg_platform@
 PKG_DISTRIBUTION= @pkg_distribution@
-PKG_SBIN_DIR    = @sbindir@
-# A bit of a hack; by rights only state should probably go here
-# But for now ...
-PKG_LIB_DIR     = /var/lib/@pkg_name@
+PKG_LIB_DIR     = $(DESTDIR)@exec_prefix@/@pkg_name@
+
 
 CC              = @cc@
 AWK             = @awk@
diff --git a/install-sh b/install-sh
deleted file mode 100755
index 58e7b58..0000000
--- a/install-sh
+++ /dev/null
@@ -1,259 +0,0 @@
-#! /bin/bash
-#
-# Copyright (c) 2000-2001 Silicon Graphics, Inc.  All Rights Reserved.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it would be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write the Free Software Foundation,
-# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-#
-#
-# This script emulates bsd install and also recognises
-# two environment variables, with the following semantics :-
-#
-# $DIST_MANIFEST - if set, the name of the file to append manifest
-#                  information in the following format:
-#                  File     :  f mode owner group src target
-#                  Directory:  d mode owner group target
-#                  Symlink  :  l linkval target
-#
-# $DIST_ROOT     - if set, prepend to target
-#
-# The sematics of all combinations of these two variables
-# are as follows:
-#
-# $DIST_MANIFEST?  $DIST_ROOT? |   Copy?  Append Manifest?
-# -----------------------------+--------------------------
-#       not set       not set  |    yes        no
-#       not set       set      |    yes        no
-#       set           not set  |    no         yes
-#       set           set      |    yes        yes
-#
-_usage() {
-    echo "Usage: $prog [-o owner] [-g group] [-m mode] -d directory"
-    echo "or     $prog [-D] [-o owner] [-g group] [-m mode] file directory/file"
-    echo "or     $prog [-o owner] [-g group] [-m mode] file [file ...] directory"
-    echo "or     $prog -S file target  (creates \"target\" symlink)"
-    echo ""
-    echo "The \$DIST_MANIFEST and \$DIST_ROOT environment variables affect the"
-    echo "behaviour of this command - see comments in the script."
-    echo "The -D flag is only available for the second usage, and causes"
-    echo "the target directory to be created before installing the file."
-    echo ""
-    exit 1
-}
-
-_chown ()
-{
-    _st=255
-    if [ $# -eq 3 ] ; then
-	chown $1:$2 $3
-	_st=$?
-	if [ $_st -ne 0 ] ; then
-	    if [ $REAL_UID != '0' ] ; then
-		if [ ! -f $DIST_ROOT/.chown.quite ] ; then
-		    echo '==============================================='
-		    echo Ownership of files under ${DIST_ROOT:-/}
-		    echo cannot be changed
-		    echo '==============================================='
-		    if [ -n "$DIST_ROOT" ] ; then
-			touch $DIST_ROOT/.chown.quite
-		    fi
-		fi
-	       _st=0
-	    fi     
-	fi
-    fi
-
-    return $_st
-}
-
-
-_manifest ()
-{ 
-    echo $* | sed -e 's/\/\//\//g' >>${DIST_MANIFEST:-/dev/null}
-}
-
-prog=`basename $0`
-HERE=`pwd`
-dflag=false
-Dflag=false
-Sflag=false
-DIRMODE=755
-FILEMODE=644
-OWNER=`id -u`
-GROUP=`id -g`
-REAL_UID=$OWNER
-
-# default is to install and don't append manifest
-INSTALL=true
-MANIFEST=:
-
-: ${DIST_ROOT:=${DESTDIR}}
-
-[ -n "$DIST_MANIFEST" -a -z "$DIST_ROOT" ] && INSTALL=false
-[ -n "$DIST_MANIFEST" ] && MANIFEST="_manifest"
-
-[ $# -eq 0 ] && _usage
-
-if $INSTALL
-then
-    CP=cp; LN=ln; MKDIR=mkdir; CHMOD=chmod; CHOWN=_chown
-else
-    CP=true; LN=true; MKDIR=true; CHMOD=true; CHOWN=true
-fi
-
-[ -n "$DIST_ROOT" -a $REAL_UID -ne 0 ] && CHOWN=true
-
-while getopts "Dcm:d:S:o:g:" c $*
-do
-   case $c in
-   c)
-	;;
-   g)
-	GROUP=$OPTARG
-	;;
-   o)
-	OWNER=$OPTARG
-	;;
-   m)
-	DIRMODE=`expr $OPTARG`
-	FILEMODE=$DIRMODE
-	;;
-   D) 
-	Dflag=true
-	;;
-   S) 
-	symlink=$OPTARG
-	Sflag=true
-	;;
-   d) 
-	dir=$DIST_ROOT/$OPTARG
-	dflag=true
-	;;
-   *)
-   	_usage
-	;;
-   esac
-done
-
-shift `expr $OPTIND - 1`
-
-status=0
-if $dflag
-then
-    #
-    # first usage
-    #
-    $MKDIR -p $dir 
-    status=$?
-    if [ $status -eq 0 ]
-    then
-	$CHMOD $DIRMODE $dir
-	status=$?
-    fi
-    if [ $status -eq 0 ]
-    then
-	$CHOWN $OWNER $GROUP $dir
-	status=$?
-    fi
-    $MANIFEST d $DIRMODE $OWNER $GROUP ${dir#$DIST_ROOT}
-elif $Sflag
-then
-    #
-    # fourth usage (symlink)
-    #
-    if [ $# -ne 1 ]
-    then
-    	_usage
-    else
-    	target=$DIST_ROOT/$1
-    fi
-    $LN -s -f $symlink $target
-    status=$?
-    $MANIFEST l $symlink ${target#$DIST_ROOT} 
-else
-    list=""
-    dir=""
-    if [ $# -eq 2 ]
-    then
-	#
-	# second usage
-	#
-	f=$1
-	dir=$DIST_ROOT/$2
-	if $Dflag
-	then
-	    mkdir -p `dirname $dir`
-	fi
-	$CP $f $dir
-	status=$?
-	if [ $status -eq 0 ]
-	then 
-	    if [ -f $dir/$f ]
-	    then
-		$CHMOD $FILEMODE $dir/$f
-		status=$?
-		if [ $status -eq 0 ]
-		then
-		    $CHOWN $OWNER $GROUP $dir/$f
-		    status=$?
-		fi
-		$MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$f ${dir#$DIST_ROOT}/$f
-	    else
-		$CHMOD $FILEMODE $dir
-		status=$?
-		if [ $status -eq 0 ]
-		then
-		    $CHOWN $OWNER $GROUP $dir
-		    status=$?
-		fi
-		$MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$dir ${dir#$DIST_ROOT}
-	    fi
-	fi
-    else
-	#
-	# third usage
-	#
-	n=1
-	while [ $# -gt 0 ]
-	do
-	    if [ $# -gt 1 ]
-	    then
-		list="$list $1"
-	    else
-		dir=$DIST_ROOT/$1
-	    fi
-	    shift
-	done
-
-	# echo DIR=$dir list=\"$list\"
-	for f in $list
-	do
-	    $CP $f $dir
-	    status=$?
-	    if [ $status -eq 0 ]
-	    then
-		$CHMOD $FILEMODE $dir/$f
-		status=$?
-		if [ $status -eq 0 ]
-		then
-		    $CHOWN $OWNER $GROUP $dir/$f
-		    status=$?
-		fi
-		$MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$f ${dir#$DIST_ROOT}/$f
-	    fi
-	    [ $status -ne 0 ] && break
-	done
-    fi
-fi
-
-exit $status
-- 
1.8.3.1


[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux