1*cf84ac9aSAndroid Build Coastguard Worker#!/usr/bin/m4 2*cf84ac9aSAndroid Build Coastguard Worker# 3*cf84ac9aSAndroid Build Coastguard Worker# Copyright (c) 2015-2017 Dmitry V. Levin <[email protected]> 4*cf84ac9aSAndroid Build Coastguard Worker# Copyright (c) 2015 Elvira Khabirova <[email protected]> 5*cf84ac9aSAndroid Build Coastguard Worker# Copyright (c) 2015-2018 The strace developers. 6*cf84ac9aSAndroid Build Coastguard Worker# All rights reserved. 7*cf84ac9aSAndroid Build Coastguard Worker# 8*cf84ac9aSAndroid Build Coastguard Worker# Redistribution and use in source and binary forms, with or without 9*cf84ac9aSAndroid Build Coastguard Worker# modification, are permitted provided that the following conditions 10*cf84ac9aSAndroid Build Coastguard Worker# are met: 11*cf84ac9aSAndroid Build Coastguard Worker# 1. Redistributions of source code must retain the above copyright 12*cf84ac9aSAndroid Build Coastguard Worker# notice, this list of conditions and the following disclaimer. 13*cf84ac9aSAndroid Build Coastguard Worker# 2. Redistributions in binary form must reproduce the above copyright 14*cf84ac9aSAndroid Build Coastguard Worker# notice, this list of conditions and the following disclaimer in the 15*cf84ac9aSAndroid Build Coastguard Worker# documentation and/or other materials provided with the distribution. 16*cf84ac9aSAndroid Build Coastguard Worker# 3. The name of the author may not be used to endorse or promote products 17*cf84ac9aSAndroid Build Coastguard Worker# derived from this software without specific prior written permission. 18*cf84ac9aSAndroid Build Coastguard Worker# 19*cf84ac9aSAndroid Build Coastguard Worker# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 20*cf84ac9aSAndroid Build Coastguard Worker# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 21*cf84ac9aSAndroid Build Coastguard Worker# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 22*cf84ac9aSAndroid Build Coastguard Worker# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 23*cf84ac9aSAndroid Build Coastguard Worker# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 24*cf84ac9aSAndroid Build Coastguard Worker# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25*cf84ac9aSAndroid Build Coastguard Worker# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26*cf84ac9aSAndroid Build Coastguard Worker# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27*cf84ac9aSAndroid Build Coastguard Worker# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 28*cf84ac9aSAndroid Build Coastguard Worker# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29*cf84ac9aSAndroid Build Coastguard Worker 30*cf84ac9aSAndroid Build Coastguard WorkerAC_DEFUN([st_MPERS_LOAD_AC_CV], [ 31*cf84ac9aSAndroid Build Coastguard Worker 32*cf84ac9aSAndroid Build Coastguard Workerpushdef([var], [ac_cv_$1]) 33*cf84ac9aSAndroid Build Coastguard Workerpushdef([saved], [saved_ac_cv_$1]) 34*cf84ac9aSAndroid Build Coastguard Workerpushdef([mpers], [ac_cv_]mpers_name[_$1]) 35*cf84ac9aSAndroid Build Coastguard Worker 36*cf84ac9aSAndroid Build Coastguard WorkerAS_IF([test -n "${var+set}"], [saved="${var}"; unset var]) 37*cf84ac9aSAndroid Build Coastguard WorkerAS_IF([test -n "${mpers+set}"], [var="${mpers}"]) 38*cf84ac9aSAndroid Build Coastguard Worker 39*cf84ac9aSAndroid Build Coastguard Workerpopdef([mpers]) 40*cf84ac9aSAndroid Build Coastguard Workerpopdef([saved]) 41*cf84ac9aSAndroid Build Coastguard Workerpopdef([var]) 42*cf84ac9aSAndroid Build Coastguard Worker 43*cf84ac9aSAndroid Build Coastguard Worker]) 44*cf84ac9aSAndroid Build Coastguard Worker 45*cf84ac9aSAndroid Build Coastguard WorkerAC_DEFUN([st_MPERS_SAVE_AC_CV], [ 46*cf84ac9aSAndroid Build Coastguard Worker 47*cf84ac9aSAndroid Build Coastguard Workerpushdef([var], [ac_cv_$1]) 48*cf84ac9aSAndroid Build Coastguard Workerpushdef([saved], [saved_ac_cv_$1]) 49*cf84ac9aSAndroid Build Coastguard Workerpushdef([mpers], [ac_cv_]mpers_name[_$1]) 50*cf84ac9aSAndroid Build Coastguard Worker 51*cf84ac9aSAndroid Build Coastguard WorkerAS_IF([test -n "${var+set}"], [mpers="${var}"]) 52*cf84ac9aSAndroid Build Coastguard WorkerAS_IF([test -n "${saved+set}"], [var="${saved}"; unset saved]) 53*cf84ac9aSAndroid Build Coastguard Worker 54*cf84ac9aSAndroid Build Coastguard Workerpopdef([mpers]) 55*cf84ac9aSAndroid Build Coastguard Workerpopdef([saved]) 56*cf84ac9aSAndroid Build Coastguard Workerpopdef([var]) 57*cf84ac9aSAndroid Build Coastguard Worker 58*cf84ac9aSAndroid Build Coastguard Worker]) 59*cf84ac9aSAndroid Build Coastguard Worker 60*cf84ac9aSAndroid Build Coastguard WorkerAC_DEFUN([st_MPERS_STRUCT_STAT], [ 61*cf84ac9aSAndroid Build Coastguard Worker 62*cf84ac9aSAndroid Build Coastguard Workerst_MPERS_LOAD_AC_CV([type_struct_stat$1]) 63*cf84ac9aSAndroid Build Coastguard WorkerAC_CHECK_TYPE([struct stat$1], 64*cf84ac9aSAndroid Build Coastguard Worker AC_DEFINE([HAVE_]MPERS_NAME[_STRUCT_STAT$1], [1], 65*cf84ac9aSAndroid Build Coastguard Worker [Define to 1 if ]mpers_name[ has the type 'struct stat$1'.]),, 66*cf84ac9aSAndroid Build Coastguard Worker[#include <sys/types.h> 67*cf84ac9aSAndroid Build Coastguard Worker#include <asm/stat.h>]) 68*cf84ac9aSAndroid Build Coastguard Workerst_MPERS_SAVE_AC_CV([type_struct_stat$1]) 69*cf84ac9aSAndroid Build Coastguard Worker 70*cf84ac9aSAndroid Build Coastguard Workerst_MPERS_LOAD_AC_CV([member_struct_stat$1_st_mtime_nsec]) 71*cf84ac9aSAndroid Build Coastguard WorkerAC_CHECK_MEMBER([struct stat$1.st_mtime_nsec], 72*cf84ac9aSAndroid Build Coastguard Worker AC_DEFINE([HAVE_]MPERS_NAME[_STRUCT_STAT$1_ST_MTIME_NSEC], [1], 73*cf84ac9aSAndroid Build Coastguard Worker [Define to 1 if 'st_mtime_nsec' is a member of ]mpers_name[ 'struct stat$1'.]),, 74*cf84ac9aSAndroid Build Coastguard Worker[#include <sys/types.h> 75*cf84ac9aSAndroid Build Coastguard Worker#include <asm/stat.h>]) 76*cf84ac9aSAndroid Build Coastguard Workerst_MPERS_SAVE_AC_CV([member_struct_stat$1_st_mtime_nsec]) 77*cf84ac9aSAndroid Build Coastguard Worker 78*cf84ac9aSAndroid Build Coastguard Worker]) 79*cf84ac9aSAndroid Build Coastguard Worker 80*cf84ac9aSAndroid Build Coastguard WorkerAC_DEFUN([st_MPERS],[ 81*cf84ac9aSAndroid Build Coastguard Worker 82*cf84ac9aSAndroid Build Coastguard Workerpushdef([mpers_name], [$1]) 83*cf84ac9aSAndroid Build Coastguard Workerpushdef([MPERS_NAME], translit([$1], [a-z], [A-Z])) 84*cf84ac9aSAndroid Build Coastguard Workerpushdef([HAVE_MPERS], [HAVE_]MPERS_NAME[_MPERS]) 85*cf84ac9aSAndroid Build Coastguard Workerpushdef([HAVE_RUNTIME], [HAVE_]MPERS_NAME[_RUNTIME]) 86*cf84ac9aSAndroid Build Coastguard Workerpushdef([MPERS_CFLAGS], [$cc_flags_$1]) 87*cf84ac9aSAndroid Build Coastguard Workerpushdef([st_cv_cc], [st_cv_$1_cc]) 88*cf84ac9aSAndroid Build Coastguard Workerpushdef([st_cv_runtime], [st_cv_$1_runtime]) 89*cf84ac9aSAndroid Build Coastguard Workerpushdef([st_cv_mpers], [st_cv_$1_mpers]) 90*cf84ac9aSAndroid Build Coastguard Worker 91*cf84ac9aSAndroid Build Coastguard Workercase "$arch" in 92*cf84ac9aSAndroid Build Coastguard Worker [$2]) 93*cf84ac9aSAndroid Build Coastguard Worker case "$enable_mpers" in 94*cf84ac9aSAndroid Build Coastguard Worker yes|check|[$1]) 95*cf84ac9aSAndroid Build Coastguard Worker 96*cf84ac9aSAndroid Build Coastguard Worker AH_TEMPLATE([HAVE_GNU_STUBS_32_H], 97*cf84ac9aSAndroid Build Coastguard Worker [Define to 1 if you have the <gnu/stubs-32.h> header file.]) 98*cf84ac9aSAndroid Build Coastguard Worker AH_TEMPLATE([HAVE_GNU_STUBS_X32_H], 99*cf84ac9aSAndroid Build Coastguard Worker [Define to 1 if you have the <gnu/stubs-x32.h> header file.]) 100*cf84ac9aSAndroid Build Coastguard Worker pushdef([gnu_stubs], [gnu/stubs-][m4_substr([$1], 1)][.h]) 101*cf84ac9aSAndroid Build Coastguard Worker AC_CHECK_HEADERS([gnu_stubs], [IFLAG=], 102*cf84ac9aSAndroid Build Coastguard Worker [mkdir -p gnu 103*cf84ac9aSAndroid Build Coastguard Worker : > gnu_stubs 104*cf84ac9aSAndroid Build Coastguard Worker AC_MSG_NOTICE([Created empty gnu_stubs]) 105*cf84ac9aSAndroid Build Coastguard Worker IFLAG=-I.]) 106*cf84ac9aSAndroid Build Coastguard Worker popdef([gnu_stubs]) 107*cf84ac9aSAndroid Build Coastguard Worker saved_CFLAGS="$CFLAGS" 108*cf84ac9aSAndroid Build Coastguard Worker CFLAGS="$CFLAGS MPERS_CFLAGS $IFLAG" 109*cf84ac9aSAndroid Build Coastguard Worker AC_CACHE_CHECK([for mpers_name personality compile support], [st_cv_cc], 110*cf84ac9aSAndroid Build Coastguard Worker [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <stdint.h> 111*cf84ac9aSAndroid Build Coastguard Worker int main(){return 0;}]])], 112*cf84ac9aSAndroid Build Coastguard Worker [st_cv_cc=yes], 113*cf84ac9aSAndroid Build Coastguard Worker [st_cv_cc=no])]) 114*cf84ac9aSAndroid Build Coastguard Worker if test $st_cv_cc = yes; then 115*cf84ac9aSAndroid Build Coastguard Worker AC_CACHE_CHECK([for mpers_name personality runtime support], 116*cf84ac9aSAndroid Build Coastguard Worker [st_cv_runtime], 117*cf84ac9aSAndroid Build Coastguard Worker [AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <stdint.h> 118*cf84ac9aSAndroid Build Coastguard Worker int main(){return 0;}]])], 119*cf84ac9aSAndroid Build Coastguard Worker [st_cv_runtime=yes], 120*cf84ac9aSAndroid Build Coastguard Worker [st_cv_runtime=no], 121*cf84ac9aSAndroid Build Coastguard Worker [st_cv_runtime=no])]) 122*cf84ac9aSAndroid Build Coastguard Worker AC_CACHE_CHECK([whether mpers.sh mpers_name MPERS_CFLAGS works], 123*cf84ac9aSAndroid Build Coastguard Worker [st_cv_mpers], 124*cf84ac9aSAndroid Build Coastguard Worker [if READELF="$READELF" \ 125*cf84ac9aSAndroid Build Coastguard Worker CC="$CC" CPP="$CPP" CPPFLAGS="$CPPFLAGS $IFLAG" \ 126*cf84ac9aSAndroid Build Coastguard Worker $srcdir/mpers_test.sh [$1] MPERS_CFLAGS; then 127*cf84ac9aSAndroid Build Coastguard Worker st_cv_mpers=yes 128*cf84ac9aSAndroid Build Coastguard Worker else 129*cf84ac9aSAndroid Build Coastguard Worker st_cv_mpers=no 130*cf84ac9aSAndroid Build Coastguard Worker fi]) 131*cf84ac9aSAndroid Build Coastguard Worker if test $st_cv_mpers = yes; then 132*cf84ac9aSAndroid Build Coastguard Worker AC_DEFINE(HAVE_MPERS, [1], 133*cf84ac9aSAndroid Build Coastguard Worker [Define to 1 if you have mpers_name mpers support]) 134*cf84ac9aSAndroid Build Coastguard Worker st_MPERS_STRUCT_STAT([]) 135*cf84ac9aSAndroid Build Coastguard Worker st_MPERS_STRUCT_STAT([64]) 136*cf84ac9aSAndroid Build Coastguard Worker 137*cf84ac9aSAndroid Build Coastguard Worker if test $st_cv_runtime = yes; then 138*cf84ac9aSAndroid Build Coastguard Worker pushdef([SIZEOF_LONG], 139*cf84ac9aSAndroid Build Coastguard Worker MPERS_NAME[_SIZEOF_LONG]) 140*cf84ac9aSAndroid Build Coastguard Worker st_MPERS_LOAD_AC_CV([sizeof_long]) 141*cf84ac9aSAndroid Build Coastguard Worker AC_CHECK_SIZEOF([long]) 142*cf84ac9aSAndroid Build Coastguard Worker st_MPERS_SAVE_AC_CV([sizeof_long]) 143*cf84ac9aSAndroid Build Coastguard Worker popdef([SIZEOF_LONG]) 144*cf84ac9aSAndroid Build Coastguard Worker 145*cf84ac9aSAndroid Build Coastguard Worker pushdef([SIZEOF_KERNEL_LONG_T], 146*cf84ac9aSAndroid Build Coastguard Worker MPERS_NAME[_SIZEOF_KERNEL_LONG_T]) 147*cf84ac9aSAndroid Build Coastguard Worker st_MPERS_LOAD_AC_CV([sizeof_kernel_long_t]) 148*cf84ac9aSAndroid Build Coastguard Worker AC_CHECK_SIZEOF([kernel_long_t],, 149*cf84ac9aSAndroid Build Coastguard Worker [#include "$srcdir/kernel_types.h"]) 150*cf84ac9aSAndroid Build Coastguard Worker st_MPERS_SAVE_AC_CV([sizeof_kernel_long_t]) 151*cf84ac9aSAndroid Build Coastguard Worker popdef([SIZEOF_KERNEL_LONG_T]) 152*cf84ac9aSAndroid Build Coastguard Worker fi 153*cf84ac9aSAndroid Build Coastguard Worker fi 154*cf84ac9aSAndroid Build Coastguard Worker fi 155*cf84ac9aSAndroid Build Coastguard Worker CFLAGS="$saved_CFLAGS" 156*cf84ac9aSAndroid Build Coastguard Worker ;; 157*cf84ac9aSAndroid Build Coastguard Worker 158*cf84ac9aSAndroid Build Coastguard Worker *) # case "$enable_mpers" 159*cf84ac9aSAndroid Build Coastguard Worker st_cv_runtime=no 160*cf84ac9aSAndroid Build Coastguard Worker st_cv_mpers=no 161*cf84ac9aSAndroid Build Coastguard Worker ;; 162*cf84ac9aSAndroid Build Coastguard Worker esac 163*cf84ac9aSAndroid Build Coastguard Worker 164*cf84ac9aSAndroid Build Coastguard Worker test "$st_cv_mpers" = yes || 165*cf84ac9aSAndroid Build Coastguard Worker st_cv_mpers=no 166*cf84ac9aSAndroid Build Coastguard Worker AC_MSG_CHECKING([whether to enable $1 personality support]) 167*cf84ac9aSAndroid Build Coastguard Worker AC_MSG_RESULT([$st_cv_mpers]) 168*cf84ac9aSAndroid Build Coastguard Worker 169*cf84ac9aSAndroid Build Coastguard Worker case "$enable_mpers,$st_cv_mpers" in 170*cf84ac9aSAndroid Build Coastguard Worker yes,no|[$1],no) 171*cf84ac9aSAndroid Build Coastguard Worker AC_MSG_ERROR([Cannot enable $1 personality support]) 172*cf84ac9aSAndroid Build Coastguard Worker ;; 173*cf84ac9aSAndroid Build Coastguard Worker esac 174*cf84ac9aSAndroid Build Coastguard Worker ;; 175*cf84ac9aSAndroid Build Coastguard Worker 176*cf84ac9aSAndroid Build Coastguard Worker *) # case "$arch" 177*cf84ac9aSAndroid Build Coastguard Worker st_cv_runtime=no 178*cf84ac9aSAndroid Build Coastguard Worker st_cv_mpers=no 179*cf84ac9aSAndroid Build Coastguard Worker ;; 180*cf84ac9aSAndroid Build Coastguard Workeresac 181*cf84ac9aSAndroid Build Coastguard Worker 182*cf84ac9aSAndroid Build Coastguard WorkerAM_CONDITIONAL(HAVE_RUNTIME, [test "$st_cv_mpers$st_cv_runtime" = yesyes]) 183*cf84ac9aSAndroid Build Coastguard WorkerAM_CONDITIONAL(HAVE_MPERS, [test "$st_cv_mpers" = yes]) 184*cf84ac9aSAndroid Build Coastguard Worker 185*cf84ac9aSAndroid Build Coastguard Workerpopdef([st_cv_mpers]) 186*cf84ac9aSAndroid Build Coastguard Workerpopdef([st_cv_runtime]) 187*cf84ac9aSAndroid Build Coastguard Workerpopdef([st_cv_cc]) 188*cf84ac9aSAndroid Build Coastguard Workerpopdef([MPERS_CFLAGS]) 189*cf84ac9aSAndroid Build Coastguard Workerpopdef([HAVE_RUNTIME]) 190*cf84ac9aSAndroid Build Coastguard Workerpopdef([HAVE_MPERS]) 191*cf84ac9aSAndroid Build Coastguard Workerpopdef([MPERS_NAME]) 192*cf84ac9aSAndroid Build Coastguard Workerpopdef([mpers_name]) 193*cf84ac9aSAndroid Build Coastguard Worker 194*cf84ac9aSAndroid Build Coastguard Worker]) 195