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