xref: /aosp_15_r20/external/coreboot/util/msrtool/configure (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1#!/usr/bin/env sh
2#
3#
4# This program is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License version 2 as
6# published by the Free Software Foundation.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11# GNU General Public License for more details.
12#
13
14# If this is left unset, try to set the version string from the highest
15# revision number of the checked out files.
16VERSION=""
17
18REV="`git describe --always 2>/dev/null`"
19VERSION="${VERSION:-$REV}"
20
21findprog() {
22	NPARMS=$#
23	WHAT="${1}"
24	shift
25	FROMENV="${1}"
26	shift
27	printf "searching for ${WHAT} (${*})..." 1>&2
28	test -n "${FROMENV}" && {
29		echo "  using environment: ${FROMENV}" 1>&2
30		echo "${FROMENV}"
31		exit 0
32	}
33	i=2
34	while test $i -lt $NPARMS; do
35		test -z "${1}" && {
36			shift
37			i=$(($i+1))
38			continue
39		}
40		FILE="`which "${1}" 2>/dev/null`"
41		test $? -eq 0 && {
42			echo "${1}"
43			break
44		}
45		shift
46		i=$(($i+1))
47	done
48	test -z "${1}" && {
49		echo "  not found!" 1>&2
50		echo 1>&2
51		echo "This is a fatal error, configure is exiting!" 1>&2
52		exit 1
53	}
54	echo "  using ${FILE} in PATH" 1>&2
55	exit 0
56}
57
58trycompile() {
59	NPARMS=$#
60	WHAT="${1}"
61	shift
62	printf "finding CFLAGS for ${WHAT}... " 1>&2
63	OUT="${OUT}\n${CC} ${CFLAGS} -o .config.o -c .config.c"
64	OUT="${OUT}\n`echo "${CC} ${CFLAGS} -o .config.o -c .config.c"|sh 2>&1`"
65	test $? -eq 0 && {
66		echo " using: ${CFLAGS}" 1>&2
67		echo "${CFLAGS}"
68		exit 0
69	}
70	i=1
71	while test $i -lt $NPARMS; do
72		OUT="${OUT}\n${CC} ${CFLAGS} ${1} -o .config.o -c .config.c 2>&1"
73		OUT="${OUT}\n`echo "${CC} ${CFLAGS} ${1} -o .config.o -c .config.c"|sh 2>&1`"
74		test $? -eq 0 && {
75			echo " using: ${CFLAGS} ${1}" 1>&2
76			echo "${CFLAGS} ${1}"
77			exit 0
78		}
79		shift
80		i=$(($i+1))
81	done
82	echo "failed!" 1>&2
83	echo 1>&2
84	printf "The following compiler commands were executed:" 1>&2
85	echo -e "${OUT}\n" 1>&2
86	echo "This is a fatal error, configure is exiting!" 1>&2
87	echo 1>&2
88	echo "You can try to fix this by manually setting CFLAGS in the environment before" 1>&2
89	echo "running configure. E.g.:" 1>&2
90	echo "CFLAGS=-I/opt/somedir/include ./configure" 1>&2
91	echo 1>&2
92	exit 1
93}
94
95trylink() {
96	NPARMS=$#
97	WHAT="${1}"
98	shift
99	printf "finding LDFLAGS for ${WHAT}... " 1>&2
100	OUT="${OUT}\n${CC} -o .config .config.o ${LDFLAGS} 2>&1"
101	OUT="${OUT}\n`echo "${CC} -o .config .config.o ${LDFLAGS}"|sh 2>&1`"
102	test $? -eq 0 && {
103		echo " using: ${LDFLAGS}" 1>&2
104		echo "${LDFLAGS}"
105		exit 0
106	}
107	i=1
108	while test $i -lt $NPARMS; do
109		OUT="${OUT}\n${CC} -o .config .config.o ${LDFLAGS} ${1} 2>&1"
110		OUT="${OUT}\n`echo "${CC} -o .config .config.o ${LDFLAGS} ${1}"|sh 2>&1`"
111		test $? -eq 0 && {
112			echo " using: ${LDFLAGS} ${1}" 1>&2
113			echo "${LDFLAGS} ${1}"
114			exit 0
115		}
116		shift
117		i=$(($i+1))
118	done
119	echo "failed!" 1>&2
120	echo 1>&2
121	printf "The following linker commands were executed:" 1>&2
122	echo -e "${OUT}\n" 1>&2
123	echo "This is a fatal error, configure is exiting!" 1>&2
124	echo 1>&2
125	echo "You can try to fix this by manually setting LDFLAGS in the environment before" 1>&2
126	echo "running configure. E.g.:" 1>&2
127	echo "LDFLAGS=-L/opt/somedir/lib ./configure" 1>&2
128	echo 1>&2
129	exit 1
130}
131
132CC=`findprog "compiler" "${CC}" clang gcc cc icc` || exit
133INSTALL=`findprog "install" "${INSTALL}" install ginstall` || exit
134
135test -n "$DEBUG" && myCFLAGS="-O2 -g" || myCFLAGS="-Os"
136CFLAGS="${CFLAGS} ${myCFLAGS} -Wall -Werror"
137
138cat > .config.c << EOF
139#include <pci/pci.h>
140struct pci_access *pacc;
141int main(int argc, char *argv[])
142{ pacc = pci_alloc(); return 0; }
143EOF
144
145pc_CFLAGS="`pkg-config libpci --cflags 2>/dev/null`"
146pc_LDFLAGS="`pkg-config libpci --libs 2>/dev/null`"
147CFLAGS=`trycompile "libpci (from pciutils)" "${pc_CFLAGS}" "-I/usr/local/include"` || {
148	rm -f .config.c
149	exit 1
150}
151LDFLAGS=`trylink "libpci (from pciutils)" "${pc_LDFLAGS}" "-lpci -lz" "-L/usr/local/lib -lpci -lz" "-framework DirectHW -lpci -lz"` || {
152	rm -f .config.c .config.o
153	exit 1
154}
155rm -f .config.c .config.o .config
156
157PREFIX="${PREFIX:-/usr/local}"
158
159echo
160echo "configured using the following settings:"
161echo
162echo "VERSION=${VERSION}"
163echo "CC=${CC}"
164echo "CFLAGS=${CFLAGS}"
165echo "LDFLAGS=${LDFLAGS}"
166echo "INSTALL=${INSTALL}"
167echo "PREFIX=${PREFIX}"
168echo
169printf "creating Makefile..."
170echo "# This file was automatically generated by configure" > Makefile
171sed -e "s#@VERSION@#${VERSION}#g" \
172	-e "s#@CC@#${CC}#g" \
173	-e "s#@CFLAGS@#${CFLAGS}#g" \
174	-e "s#@LDFLAGS@#${LDFLAGS}#g" \
175	-e "s#@INSTALL@#${INSTALL}#g" \
176	-e "s#@PREFIX@#${PREFIX}#g" \
177	Makefile.in >> Makefile
178echo "  done"
179echo
180