From 8f861d438b048995a0cc7e5b3f2589515cd7c074 Mon Sep 17 00:00:00 2001 From: orbea Date: Wed, 2 May 2018 09:15:20 -0700 Subject: [PATCH] qb: Fix checking the CXX compiler This does the following. 1. Fixes checking if the CXX compiler works on platforms other than windows. 2. Turns the error when the CXX compiler is missing or doesn't work into a warning. 3. Adds HAVE_CC and HAVE_CXX. 4. Only adds CC and CXX to config.mk when HAVE_CC or HAVE_CXX are true. 5. Disables Qt companion, Vulkan, CXX_BUILD and NEED_CXX_LINKER if HAVE_CXX is false. 6. Explicitly errors when the CXX compiler is broken or missing and Qt or vulkan support is enabled. 7. No longer explicitly links with the CXX compiler on windows since this should no longer be needed. This also adds the function `check_enabled` to `qb/qb.lib.sh` which can be used to dynamically disable any libraries that require C++ support. --- Makefile | 21 ++++++++++----------- qb/config.comp.sh | 6 +----- qb/config.libs.sh | 4 ++++ qb/qb.comp.sh | 6 +++++- qb/qb.libs.sh | 16 ++++++++++++++-- 5 files changed, 34 insertions(+), 19 deletions(-) diff --git a/Makefile b/Makefile index ba73a32b8a..52d5361cbc 100644 --- a/Makefile +++ b/Makefile @@ -92,20 +92,19 @@ APPEND_CFLAGS := $(CFLAGS) CXXFLAGS += $(APPEND_CFLAGS) -std=c++11 -D__STDC_CONSTANT_MACROS OBJCFLAGS := $(CFLAGS) -D__STDC_CONSTANT_MACROS -ifeq ($(CXX_BUILD), 1) - LINK = $(CXX) - CFLAGS := $(CXXFLAGS) -xc++ - CFLAGS += -DCXX_BUILD - CXXFLAGS += -DCXX_BUILD -else - ifeq ($(NEED_CXX_LINKER),1) +ifeq ($(HAVE_CXX), 1) + ifeq ($(CXX_BUILD), 1) + LINK = $(CXX) + CFLAGS := $(CXXFLAGS) -xc++ + CFLAGS += -DCXX_BUILD + CXXFLAGS += -DCXX_BUILD + else ifeq ($(NEED_CXX_LINKER),1) LINK = $(CXX) - else ifeq ($(findstring Win32,$(OS)),) - LINK = $(CC) else - # directx-related code is c++ - LINK = $(CXX) + LINK = $(CC) endif +else + LINK = $(CC) ifneq ($(GNU90_BUILD), 1) ifneq ($(findstring icc,$(CC)),) diff --git a/qb/config.comp.sh b/qb/config.comp.sh index 1ce76eeb14..cd894adfb6 100644 --- a/qb/config.comp.sh +++ b/qb/config.comp.sh @@ -1,6 +1,2 @@ USE_LANG_C="yes" - -# C++ compiler is optional in other platforms supported by ./configure -if [ "$OS" = 'Win32' ]; then - USE_LANG_CXX="yes" -fi +USE_LANG_CXX="yes" diff --git a/qb/config.libs.sh b/qb/config.libs.sh index 293ad9c814..e36974ceef 100644 --- a/qb/config.libs.sh +++ b/qb/config.libs.sh @@ -270,6 +270,8 @@ check_val '' PULSE -lpulse check_val '' SDL -lSDL SDL check_val '' SDL2 -lSDL2 SDL2 +check_enabled QT 'Qt companion' + if [ "$HAVE_QT" != 'no' ] && [ "$MOC_PATH" != 'none' ]; then check_pkgconf QT5CORE Qt5Core 5.2 check_pkgconf QT5GUI Qt5Gui 5.2 @@ -487,6 +489,8 @@ fi check_lib '' STRCASESTR "$CLIB" strcasestr check_lib '' MMAP "$CLIB" mmap +check_enabled VULKAN vulkan + if [ "$HAVE_VULKAN" != "no" ] && [ "$OS" = 'Win32' ]; then HAVE_VULKAN=yes else diff --git a/qb/qb.comp.sh b/qb/qb.comp.sh index ce677e8821..902afac3c5 100644 --- a/qb/qb.comp.sh +++ b/qb/qb.comp.sh @@ -11,6 +11,7 @@ int main(void) { puts("Hai world!"); return 0; } EOF cc_works=0 +HAVE_CC=no if [ "$CC" ]; then "$CC" -o "$TEMP_EXE" "$TEMP_C" >/dev/null 2>&1 && cc_works=1 else @@ -29,6 +30,7 @@ rm -f -- "$TEMP_C" "$TEMP_EXE" cc_status='does not work' if [ "$cc_works" = '1' ]; then cc_status='works' + HAVE_CC='yes' elif [ -z "$CC" ]; then cc_status='not found' fi @@ -46,6 +48,7 @@ int main() { std::cout << "Hai guise" << std::endl; return 0; } EOF cxx_works=0 +HAVE_CXX=no if [ "$CXX" ]; then "$CXX" -o "$TEMP_EXE" "$TEMP_CXX" >/dev/null 2>&1 && cxx_works=1 else @@ -64,6 +67,7 @@ rm -f -- "$TEMP_CXX" "$TEMP_EXE" cxx_status='does not work' if [ "$cxx_works" = '1' ]; then cxx_status='works' + HAVE_CXX='yes' elif [ -z "$CXX" ]; then cxx_status='not found' fi @@ -71,7 +75,7 @@ fi echo "Checking for suitable working C++ compiler ... $CXX $cxx_status" if [ "$cxx_works" = '0' ] && [ "$USE_LANG_CXX" = 'yes' ]; then - die 1 'Error: Cannot proceed without a working C++ compiler.' + die : 'Warning: A working C++ compiler was not found, C++ features will be disabled.' fi if [ "$OS" = "Win32" ]; then diff --git a/qb/qb.libs.sh b/qb/qb.libs.sh index e4fb0028b1..41b840e7cf 100644 --- a/qb/qb.libs.sh +++ b/qb/qb.libs.sh @@ -28,6 +28,18 @@ check_compiler() # $1 = language $2 = function in lib fi } +check_enabled() # $1 = HAVE_$1 $2 = lib +{ [ "$HAVE_CXX" != 'no' ] && return 0 + tmpval="$(eval "printf %s \"\$HAVE_$1\"")" + + if [ "$tmpval" != 'yes' ]; then + eval "HAVE_$1=no" + return 0 + fi + + die 1 "Forced to build with $2 support and the C++ compiler is disabled. Exiting ..." +} + check_lib() # $1 = language $2 = HAVE_$2 $3 = lib $4 = function in lib $5 = extralibs $6 = headers $7 = critical error message [checked only if non-empty] { tmpval="$(eval "printf %s \"\$HAVE_$2\"")" [ "$tmpval" = 'no' ] && return 0 @@ -222,8 +234,8 @@ create_config_make() printf %s\\n "Creating make config: $outfile" - { [ "${CC}" ] && printf %s\\n "CC = $CC" "CFLAGS = $CFLAGS" - [ "${CXX}" ] && printf %s\\n "CXX = $CXX" "CXXFLAGS = $CXXFLAGS" + { [ "$HAVE_CC" = 'yes' ] && printf %s\\n "CC = $CC" "CFLAGS = $CFLAGS" + [ "$HAVE_CXX" = 'yes' ] && printf %s\\n "CXX = $CXX" "CXXFLAGS = $CXXFLAGS" printf %s\\n "WINDRES = $WINDRES" \ "MOC = $MOC" \