xref: /dragonfly/libexec/customcc/cc.sh (revision e6d22e9b)
1#!/bin/sh
2#
3# Copyright (c) 2009-2014
4#	The DragonFly Project.  All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9#
10# 1. Redistributions of source code must retain the above copyright
11#    notice, this list of conditions and the following disclaimer.
12# 2. Redistributions in binary form must reproduce the above copyright
13#    notice, this list of conditions and the following disclaimer in
14#    the documentation and/or other materials provided with the
15#    distribution.
16# 3. Neither the name of The DragonFly Project nor the names of its
17#    contributors may be used to endorse or promote products derived
18#    from this software without specific, prior written permission.
19#
20# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23# FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
24# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25# INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
26# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
30# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31# SUCH DAMAGE.
32#
33
34CNAME=$(basename $0)
35
36INCPREFIX=@@INCPREFIX@@
37MACHARCH=@@MACHARCH@@
38MACHREL=@@MACHREL@@
39
40. /etc/defaults/compilers.conf
41[ -f /etc/compilers.conf ] && . /etc/compilers.conf
42
43
44case ${CNAME} in
45	gcc)
46		CUSTOM_GCC=`eval echo \$\{${CCVER}_GCC\}`
47		if [ -n  "${CUSTOM_GCC}" ]; then
48			COMPILER=${CUSTOM_GCC}
49			INCOPT=`eval echo \$\{${CCVER}_INCOPT\}`
50		else
51			COMPILER=/usr/libexec/gcc80/gcc
52			INCOPT=${STD_INCOPT}
53		fi
54		;;
55	g++)
56		CUSTOM_GXX=`eval echo \$\{${CCVER}_GXX\}`
57		if [ -n  "${CUSTOM_GXX}" ]; then
58			COMPILER=${CUSTOM_GXX}
59			INCOPT=`eval echo \$\{${CCVER}_INCOPT\}`
60			INCOPTCXX=`eval echo \$\{${CCVER}_INCOPTCXX\}`
61		else
62			COMPILER=/usr/libexec/gcc80/g++
63			INCOPT=${GCC_INCOPT}
64			INCOPTCXX="-isystem /usr/include/c++/4.7"
65		fi
66		;;
67	clang)
68		CUSTOM_CLANG=`eval echo \$\{${CCVER}_CLANG\}`
69		if [ -n  "${CUSTOM_CLANG}" ]; then
70			COMPILER=${CUSTOM_CLANG}
71			INCOPT=`eval echo \$\{${CCVER}_INCOPT\}`
72		else
73			COMPILER=/usr/libexec/clangbase/clang
74			INCOPT=${STD_INCOPT}
75		fi
76		;;
77	clang++)
78		CUSTOM_CLANGCXX=`eval echo \$\{${CCVER}_CLANGCXX\}`
79		if [ -n  "${CUSTOM_CLANGCXX}" ]; then
80			COMPILER=${CUSTOM_CLANGCXX}
81			INCOPT=`eval echo \$\{${CCVER}_INCOPT\}`
82			INCOPTCXX=`eval echo \$\{${CCVER}_INCOPTCXX\}`
83		else
84			COMPILER=/usr/libexec/clangbase/clang++
85			INCOPT=${CLANG_INCOPT}
86			INCOPTCXX="-isystem /usr/include/c++/4.7"
87		fi
88		;;
89	cc)
90		CUSTOM_CC=`eval echo \$\{${CCVER}_CC\}`
91		if [ -n ${CUSTOM_CC} ]; then
92			COMPILER=${CUSTOM_CC}
93			INCOPT=`eval echo \$\{${CCVER}_INCOPT\}`
94		else
95			echo "${CCVER}_CC undefined, see compilers.conf(5)"
96			exit 1
97		fi
98		;;
99	c++|CC)
100		CUSTOM_CXX=`eval echo \$\{${CCVER}_CXX\}`
101		if [ -n ${CUSTOM_CXX} ]; then
102			COMPILER=${CUSTOM_CXX}
103			INCOPT=`eval echo \$\{${CCVER}_INCOPT\}`
104			INCOPTCXX=`eval echo \$\{${CCVER}_INCOPTCXX\}`
105		else
106			echo "${CCVER}_CXX undefined, see compilers.conf(5)"
107			exit 1
108		fi
109		;;
110	cpp)
111		CUSTOM_CPP=`eval echo \$\{${CCVER}_CPP\}`
112		if [ -n ${CUSTOM_CPP} ]; then
113			COMPILER=${CUSTOM_CPP}
114			INCOPT=`eval echo \$\{${CCVER}_INCOPT\}`
115		else
116			echo "${CCVER}_CPP undefined, see compilers.conf(5)"
117			exit 1
118		fi
119		;;
120	clang-cpp)
121		CUSTOM_CLANGCPP=`eval echo \$\{${CCVER}_CLANGCPP\}`
122		if [ -n  "${CUSTOM_CLANGCPP}" ]; then
123			COMPILER=${CUSTOM_CLANGCPP}
124			INCOPT=`eval echo \$\{${CCVER}_INCOPT\}`
125		else
126			COMPILER=/usr/libexec/clangbase/clang-cpp
127			INCOPT=${CLANG_INCOPT}
128		fi
129		;;
130	gcov)
131		CUSTOM_GCOV=`eval echo \$\{${CCVER}_GCOV\}`
132		if [ -n  "${CUSTOM_GCOV}" ]; then
133			exec ${CUSTOM_GCOV} "$@"
134		else
135			exec /usr/libexec/gcc80/gcov "$@"
136		fi
137		;;
138	*)
139		echo "customcc: unrecognized command '${CNAME}'"
140		exit 1
141		;;
142esac
143
144case ${CNAME} in
145	gcc|clang|cc)
146		CUSTOM_CFLAGS=`eval echo \$\{${CCVER}_CFLAGS\}`
147		exec ${COMPILER} ${INCOPT} ${CUSTOM_CFLAGS} "$@"
148		;;
149	g++|clang++|c++|CC)
150		CUSTOM_CXXFLAGS=`eval echo \$\{${CCVER}_CXXFLAGS\}`
151		exec ${COMPILER} ${INCOPT} ${INCOPTCXX} ${CUSTOM_CFLAGS} "$@"
152		;;
153	cpp|clang-cpp)
154		CUSTOM_CPPFLAGS=`eval echo \$\{${CCVER}_CPPFLAGS\}`
155		exec ${COMPILER} ${INCOPT} ${CUSTOM_CPPFLAGS} "$@"
156		;;
157esac
158