1ae389aa9SAndy Fiddaman#!/usr/bin/ksh 2ae389aa9SAndy Fiddaman# 3ae389aa9SAndy Fiddaman# 4ae389aa9SAndy Fiddaman# This file and its contents are supplied under the terms of the 5ae389aa9SAndy Fiddaman# Common Development and Distribution License ("CDDL"), version 1.0. 6ae389aa9SAndy Fiddaman# You may only use this file in accordance with the terms of version 7ae389aa9SAndy Fiddaman# 1.0 of the CDDL. 8ae389aa9SAndy Fiddaman# 9ae389aa9SAndy Fiddaman# A full copy of the text of the CDDL should have accompanied this 10ae389aa9SAndy Fiddaman# source. A copy of the CDDL is also available via the Internet at 11ae389aa9SAndy Fiddaman# http://www.illumos.org/license/CDDL. 12ae389aa9SAndy Fiddaman# 13ae389aa9SAndy Fiddaman 14ae389aa9SAndy Fiddaman# 15ae389aa9SAndy Fiddaman# Copyright 2019 OmniOS Community Edition (OmniOSce) Association. 16ae389aa9SAndy Fiddaman# 17ae389aa9SAndy Fiddaman 18ae389aa9SAndy Fiddaman: "${MAKE:=/usr/bin/make}" 19ae389aa9SAndy Fiddaman: "${FILEDIR:=/opt/util-tests/tests/files}" 20ae389aa9SAndy Fiddaman 21ae389aa9SAndy Fiddaman[[ -d "$FILEDIR" ]] || fail "no files directory $FILEDIR" 22ae389aa9SAndy Fiddaman 23ae389aa9SAndy Fiddamantypeset -i fail=0 24ae389aa9SAndy Fiddaman 25ae389aa9SAndy Fiddamanfunction fail { 26ae389aa9SAndy Fiddaman echo "FAIL $@" 27ae389aa9SAndy Fiddaman ((fail++)) 28ae389aa9SAndy Fiddaman} 29ae389aa9SAndy Fiddaman 30ae389aa9SAndy Fiddamanfunction pass { 31ae389aa9SAndy Fiddaman echo "PASS $@" 32ae389aa9SAndy Fiddaman} 33ae389aa9SAndy Fiddaman 34ae389aa9SAndy Fiddamanfunction check_results { 35ae389aa9SAndy Fiddaman typeset expected="$1" 36ae389aa9SAndy Fiddaman typeset actual="$2" 37ae389aa9SAndy Fiddaman typeset name="$3" 38ae389aa9SAndy Fiddaman 39ae389aa9SAndy Fiddaman if ! cmp -s $expected $actual; then 40ae389aa9SAndy Fiddaman fail "$name" 41ae389aa9SAndy Fiddaman diff -u "$expected" "$actual" | sed 's/^/ /' 42ae389aa9SAndy Fiddaman else 43ae389aa9SAndy Fiddaman pass "$name" 44ae389aa9SAndy Fiddaman fi 45ae389aa9SAndy Fiddaman} 46ae389aa9SAndy Fiddaman 47ae389aa9SAndy Fiddamantest_make_C() { 48ae389aa9SAndy Fiddaman TD=$(mktemp -d -t) 49ae389aa9SAndy Fiddaman 50ae389aa9SAndy Fiddaman if [[ ! -d "$TD" ]]; then 51ae389aa9SAndy Fiddaman fail "couldn't create test directory $TD" 52ae389aa9SAndy Fiddaman return 53ae389aa9SAndy Fiddaman fi 54ae389aa9SAndy Fiddaman 55ae389aa9SAndy Fiddaman # Create output files corresponding to running make in each directory 56ae389aa9SAndy Fiddaman # and to running make with a -C argument pointing to the directory. 57ae389aa9SAndy Fiddaman # The results should be identical. 58ae389aa9SAndy Fiddaman for s in "" a b c; do 59ae389aa9SAndy Fiddaman # Baseline - running 'make' in the directory 60ae389aa9SAndy Fiddaman ( cd "$FILEDIR/make_a/$s"; $MAKE ) > $TD/M_a_$s.out 2>&1 61ae389aa9SAndy Fiddaman 62ae389aa9SAndy Fiddaman # Running 'make -C' from a directory with no make* files 63ae389aa9SAndy Fiddaman ( cd "$TD"; $MAKE -C "$FILEDIR/make_a/$s" ) \ 64ae389aa9SAndy Fiddaman > $TD/Ce_a_$s.out 2>&1 65ae389aa9SAndy Fiddaman check_results $TD/{M,Ce}_a_$s.out \ 66ae389aa9SAndy Fiddaman "make -C a/$s from empty directory" 67ae389aa9SAndy Fiddaman 68ae389aa9SAndy Fiddaman # Running 'make -C' from a directory WITH make* files 69ae389aa9SAndy Fiddaman ( cd "$FILEDIR/make_a"; $MAKE -C "$FILEDIR/make_a/$s" ) \ 70ae389aa9SAndy Fiddaman > $TD/C_a_$s.out 2>&1 71ae389aa9SAndy Fiddaman check_results $TD/{M,C}_a_$s.out \ 72ae389aa9SAndy Fiddaman "make -C a/$s from non-empty directory" 73ae389aa9SAndy Fiddaman 74ae389aa9SAndy Fiddaman # Using MAKEFLAGS from a directory with no make* files 75ae389aa9SAndy Fiddaman ( cd "$TD"; MAKEFLAGS="-C $FILEDIR/make_a/$s" $MAKE) \ 76ae389aa9SAndy Fiddaman > $TD/Fe_a_$s.out 2>&1 77ae389aa9SAndy Fiddaman check_results $TD/{M,Fe}_a_$s.out \ 78ae389aa9SAndy Fiddaman "makeflags -C a/$s from empty directory" 79ae389aa9SAndy Fiddaman 80ae389aa9SAndy Fiddaman # Using MAKEFLAGS from a directory WITH make* files 81ae389aa9SAndy Fiddaman ( cd "$FILEDIR/make_a"; \ 82ae389aa9SAndy Fiddaman MAKEFLAGS="-C $FILEDIR/make_a/$s" $MAKE) \ 83ae389aa9SAndy Fiddaman > $TD/F_a_$s.out 2>&1 84ae389aa9SAndy Fiddaman check_results $TD/{M,F}_a_$s.out \ 85ae389aa9SAndy Fiddaman "makeflags -C a/$s from non-empty directory" 86ae389aa9SAndy Fiddaman done 87ae389aa9SAndy Fiddaman 88ae389aa9SAndy Fiddaman rm -rf "$TD" 89ae389aa9SAndy Fiddaman} 90ae389aa9SAndy Fiddaman 91ae389aa9SAndy Fiddamantest_make_C_multiple() { 92ae389aa9SAndy Fiddaman TD=$(mktemp -d -t) 93ae389aa9SAndy Fiddaman 94ae389aa9SAndy Fiddaman if [[ ! -d "$TD" ]]; then 95ae389aa9SAndy Fiddaman fail "couldn't create test directory $TD" 96ae389aa9SAndy Fiddaman return 97ae389aa9SAndy Fiddaman fi 98ae389aa9SAndy Fiddaman 99ae389aa9SAndy Fiddaman # Expected output 100ae389aa9SAndy Fiddaman ( cd "$FILEDIR/make_a/b"; $MAKE ) > $TD/expect 2>&1 101ae389aa9SAndy Fiddaman 102ae389aa9SAndy Fiddaman # Running 'make -C' from a directory with no make* files 103ae389aa9SAndy Fiddaman ( cd "$TD"; $MAKE -C $FILEDIR/make_a/a -C $FILEDIR/make_a/b ) \ 104ae389aa9SAndy Fiddaman > $TD/empty 2>&1 105ae389aa9SAndy Fiddaman check_results $TD/{expect,empty} "make -C -C from empty directory" 106ae389aa9SAndy Fiddaman 107ae389aa9SAndy Fiddaman # Running 'make -C' from a directory WITH make* files 108ae389aa9SAndy Fiddaman ( cd "$FILEDIR/make_a"; \ 109ae389aa9SAndy Fiddaman $MAKE -C $FILEDIR/make_a/a -C $FILEDIR/make_a/b ) \ 110ae389aa9SAndy Fiddaman > $TD/with 2>&1 111ae389aa9SAndy Fiddaman check_results $TD/{expect,with} "make -C -C from non-empty directory" 112ae389aa9SAndy Fiddaman 113ae389aa9SAndy Fiddaman # Using MAKEFLAGS from a directory with no make* files 114ae389aa9SAndy Fiddaman ( cd "$TD"; 115ae389aa9SAndy Fiddaman MAKEFLAGS="-C $FILEDIR/make_a/a -C $FILEDIR/make_a/b" $MAKE ) \ 116ae389aa9SAndy Fiddaman > $TD/emptyflags 2>&1 117ae389aa9SAndy Fiddaman check_results $TD/{expect,emptyflags} \ 118ae389aa9SAndy Fiddaman "makeflags -C -C from empty directory" 119ae389aa9SAndy Fiddaman 120ae389aa9SAndy Fiddaman # Using MAKEFLAGS from a directory WITH make* files 121ae389aa9SAndy Fiddaman ( cd "$FILEDIR/make_a"; 122ae389aa9SAndy Fiddaman MAKEFLAGS="-C $FILEDIR/make_a/a -C $FILEDIR/make_a/b" $MAKE ) \ 123ae389aa9SAndy Fiddaman > $TD/withflags 2>&1 124ae389aa9SAndy Fiddaman check_results $TD/{expect,withflags} \ 125ae389aa9SAndy Fiddaman "makeflags -C -C from non-empty directory" 126ae389aa9SAndy Fiddaman 127ae389aa9SAndy Fiddaman ( cd "$FILEDIR/make_l"; $MAKE -C ../make_a/a -C ../b ) \ 128ae389aa9SAndy Fiddaman > $TD/relative 2>&1 129ae389aa9SAndy Fiddaman check_results $TD/{expect,relative} \ 130ae389aa9SAndy Fiddaman "make -C -C relative from empty directory" 131ae389aa9SAndy Fiddaman 132ae389aa9SAndy Fiddaman rm -rf "$TD" 133ae389aa9SAndy Fiddaman} 134ae389aa9SAndy Fiddaman 135ae389aa9SAndy Fiddamantest_make_C_invalid() { 136ae389aa9SAndy Fiddaman outf=$(mktemp) 137ae389aa9SAndy Fiddaman 138ae389aa9SAndy Fiddaman tst="make -C error" 139ae389aa9SAndy Fiddaman $MAKE -C > $outf 2>&1 && fail "$tst" || pass "$tst" 140ae389aa9SAndy Fiddaman egrep -s 'Missing argument' $outf && pass "$tst (output)" \ 141ae389aa9SAndy Fiddaman || fail "$tst (output)" 142ae389aa9SAndy Fiddaman 143ae389aa9SAndy Fiddaman tst="MAKEFLAGS=-C error" 144ae389aa9SAndy Fiddaman MAKEFLAGS="-C" $MAKE > $outf 2>&1 && fail "$tst" || pass "$tst" 145ae389aa9SAndy Fiddaman egrep -s 'Missing argument' $outf && pass "$tst (output)" \ 146ae389aa9SAndy Fiddaman || fail "$tst (output)" 147ae389aa9SAndy Fiddaman 148ae389aa9SAndy Fiddaman tst="make -C <noexist>" 149ae389aa9SAndy Fiddaman $MAKE -C /no/such/directory > $outf 2>&1 && fail "$tst" || pass "$tst" 150ae389aa9SAndy Fiddaman egrep -s 'No such file or directory' $outf && pass "$tst (output)" \ 151ae389aa9SAndy Fiddaman || fail "$tst (output)" 152ae389aa9SAndy Fiddaman 153ae389aa9SAndy Fiddaman tst="MAKEFLAGS=-C <noexist>" 154ae389aa9SAndy Fiddaman MAKEFLAGS="-C /no/such/directory" $MAKE > $outf 2>&1 && fail "$tst" \ 155ae389aa9SAndy Fiddaman || pass "$tst" 156ae389aa9SAndy Fiddaman egrep -s 'No such file or directory' $outf && pass "$tst (output)" \ 157ae389aa9SAndy Fiddaman || fail "$tst (output)" 158ae389aa9SAndy Fiddaman 159ae389aa9SAndy Fiddaman rm -f $outf 160ae389aa9SAndy Fiddaman} 161ae389aa9SAndy Fiddaman 162ae389aa9SAndy Fiddamantest_make_C 163ae389aa9SAndy Fiddamantest_make_C_multiple 164ae389aa9SAndy Fiddamantest_make_C_invalid 165ae389aa9SAndy Fiddaman 166ae389aa9SAndy Fiddaman[[ $fail -gt 0 ]] && exit -1 167ae389aa9SAndy Fiddaman 168*e7253420SAndy Fiddamanexit 0 169*e7253420SAndy Fiddaman 170