From b1e647baf2e1724838e34d25339a3672caf09e14 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Thu, 12 Jul 2012 19:18:06 +0200 Subject: added basic structure --- makefiles/gmake/clean.mk | 21 ++- makefiles/gmake/compiler.mk | 100 ++++-------- makefiles/gmake/depend.mk | 49 ++---- makefiles/gmake/dist.mk | 15 +- makefiles/gmake/guess_env | 371 ++++++++++++++++++++++++-------------------- makefiles/gmake/help.mk | 25 +++ makefiles/gmake/i18n.mk | 12 +- makefiles/gmake/install.mk | 40 ++--- makefiles/gmake/libs.mk | 63 ++++++-- makefiles/gmake/platform.mk | 149 +++++++++++------- makefiles/gmake/sub.mk | 17 +- makefiles/gmake/top.mk | 68 +++++++- 12 files changed, 545 insertions(+), 385 deletions(-) (limited to 'makefiles') diff --git a/makefiles/gmake/clean.mk b/makefiles/gmake/clean.mk index 92061d4..a8128af 100644 --- a/makefiles/gmake/clean.mk +++ b/makefiles/gmake/clean.mk @@ -5,8 +5,7 @@ # - local_clean, local_distclean targets in local GNUmakefile # - all artifacts to clean: # - BINS, TEST_BINS, TEST_CPP_BINS, CPP_BINS -# - OBJS, CPPOBJS, BIN_OBJS, TEST_BIN_OBJS, CPP_BIN_OBJS, TEST_CPP_BIN_OBJS -# - CMODULES, CPPMODULES +# - OBJS, CPP_OBJS, BIN_OBJS, TEST_BIN_OBJS, CPP_BIN_OBJS, TEST_CPP_BIN_OBJS # # provides: # - target: clean @@ -15,26 +14,36 @@ .PHONY: clean_recursive clean local_clean clean_recursive: + @test -z "$(PRESUBDIRS)" || ( set -e; for d in $(PRESUBDIRS)""; do \ + (set -e; $(MAKE) -C $$d clean || exit 1); done) @test -z "$(SUBDIRS)" || ( set -e; for d in $(SUBDIRS)""; do \ (set -e; $(MAKE) -C $$d clean || exit 1); done) clean: clean_recursive clean_po local_clean -@rm -f *.bak 2>/dev/null -@rm -f *~ 2>/dev/null - -@rm -f *.d port/*.d 2>/dev/null + -@rm -f *.d */*.d */*/*.d 2>/dev/null -@rm -f $(BINS) $(CPP_BINS) $(TEST_BINS) $(TEST_CPP_BINS) 2>/dev/null -@rm -f $(OBJS) $(CPP_OBJS) $(BIN_OBJS) $(TEST_BIN_OBJS) $(CPP_BIN_OBJS) $(TEST_CPP_BIN_OBJS) 2>/dev/null -@rm -f exec/* 2>/dev/null -@rm -f *.core 2>/dev/null - -@rm -f $(CMODULES) $(CPPMODULES) 2>/dev/null - -@rm -f $(CMODULES:.o=.d) $(CPPMODULES:.o=.d) 2>/dev/null -@rm -rf $(STATIC_LIB) 2>/dev/null - -@rm -rf $(DYNAMIC_LIB).$(DYNAMIC_LIB_MAJOR).$(DYNAMIC_LIB_MINOR).$(DYNAMIC_LIB_PATCH) 2>/dev/null -@rm -f $(SH_OBJS) rm -f $(SHPP_OBJS) 2>/dev/null +ifneq "$(DYNAMIC_LIB)" "" + -@rm -rf $(DYNAMIC_LIB).$(DYNAMIC_LIB_MAJOR).$(DYNAMIC_LIB_MINOR).$(DYNAMIC_LIB_PATCH) 2>/dev/null + -@rm -rf $(DYNAMIC_LIB).$(DYNAMIC_LIB_MAJOR) 2>/dev/null + -@rm -rf $(DYNAMIC_LIB) 2>/dev/null +endif +ifneq "$(DYNAMIC_MODULE)" "" + -@rm -rf $(DYNAMIC_MODULE) 2>/dev/null +endif + .PHONY: distclean_recursive distclean local_distclean distclean_recursive: + @test -z "$(PRESUBDIRS)" || ( set -e; for d in $(PRESUBDIRS)""; do \ + (set -e; $(MAKE) -C $$d distclean || exit 1); done) @test -z "$(SUBDIRS)" || ( set -e; for d in $(SUBDIRS)""; do \ (set -e; $(MAKE) -C $$d distclean || exit 1); done) diff --git a/makefiles/gmake/compiler.mk b/makefiles/gmake/compiler.mk index 01e9837..062a30b 100644 --- a/makefiles/gmake/compiler.mk +++ b/makefiles/gmake/compiler.mk @@ -33,9 +33,7 @@ GCC_MINOR_VERSION ?= $(shell $(TOPDIR)/makefiles/gmake/guess_env --gcc-minor-ver # -fstack-protector-all: does something funny to the shared objects.. # -Wstack-protector makes no sense without SSP # everything implied by -Wall is not explicitly specified (gcc 4.2.3) -# TODO: reenable -O2 # -Waggregate-return: is for K&R code and mostly useless nowadays -# -Wno-long-long: sqlite.h on FreeBSD 6.2 shows problems otherwise # compilation flags and compilers COMMON_COMPILE_FLAGS = \ @@ -119,13 +117,13 @@ endif endif -CCPP_COMPILE_FLAGS = \ +CXX_COMPILE_FLAGS = \ $(COMMON_COMPILE_FLAGS) \ -std=c++98 # gcc 4.x ifeq "$(GCC_MAJOR_VERSION)" "4" -CCPP_COMPILE_FLAGS += \ +CXX_COMPILE_FLAGS += \ -Wno-invalid-offsetof -funit-at-a-time endif @@ -133,38 +131,25 @@ ifeq "$(GCC_MAJOR_VERSION)" "3" # gcc 3.4, not tested yet ifeq "$(GCC_MINOR_VERSION)" "4" -CCPP_COMPILE_FLAGS += \ +CXX_COMPILE_FLAGS += \ -Wno-invalid-offsetof endif # gcc 3.3, testend on OpenBSD 4.2 ifeq "$(GCC_MINOR_VERSION)" "3" -#CCPP_COMPILE_FLAGS += \ +#CXX_COMPILE_FLAGS += \ # -Wdeclaration-after-statement endif endif #CC = gcc -CCPP = g++ +CXX = g++ endif # end of gcc section -# start of tcc section - -# currently we don't need this, the tcc flags are fairly consistent -#TCC_MAJOR_VERSION ?= $(shell $(TOPDIR)/makefiles/gmake/guess_env --tcc-major-version $(CC) "$(CURDIR)" $(TOPDIR)) -#TCC_MINOR_VERSION ?= $(shell $(TOPDIR)/makefiles/gmake/guess_env --tcc-minor-version $(CC) "$(CURDIR)" $(TOPDIR)) - -ifeq "$(COMPILER)" "tcc" -COMPILE_FLAGS = \ - -Wall -Werror -endif - -# end of tcc section - # start of icc section # currently we don't need this, the icc flags are fairly consistent @@ -183,33 +168,29 @@ endif # start of spro section # -xc99=all: full C99 compliance for the code (syntax and library functions) -# -Xc: full ISO compliance, no K&R stuf # -mt: enable mutlithreading (-D_REENTRANT for header files, -lthread for ld) # -errwarn=%all: convert all warnings to errors -# -v: do more restrictive syntax checking -# TODO: enable -O2 ifeq "$(COMPILER)" "spro" + +CC=CC +CXX=CC + STD99_COMPILE_FLAGS = \ -xc99=all -COMPILE_FLAGS = \ - $(STD99_COMPILE_FLAGS) -Xc -errwarn=%all -mt -v -endif -# end of spro section +COMMON_COMPILE_FLAGS = \ + -errwarn=%all -mt -# start of pcc section +COMPILE_FLAGS = \ + $(STD99_COMPILE_FLAGS) $(COMMON_COMPILE_FLAGS) -# currently we don't need this, the pcc flags are fairly consistent -#PCC_MAJOR_VERSION ?= $(shell $(TOPDIR)/makefiles/gmake/guess_env --pcc-major-version $(CC) "$(CURDIR)" $(TOPDIR)) -#PCC_MINOR_VERSION ?= $(shell $(TOPDIR)/makefiles/gmake/guess_env --pcc-minor-version $(CC) "$(CURDIR)" $(TOPDIR)) +CXX_COMPILE_FLAGS = \ + $(COMMON_COMPILE_FLAGS) -ifeq "$(COMPILER)" "pcc" -COMPILE_FLAGS = \ - --fatal-warnings endif -# end of pcc section +# end of spro section # set flags for threading support using POSIX threads. This is completly different # between compiler/platforms @@ -244,17 +225,8 @@ PTHREADS_CFLAGS = PTHREADS_LDFLAGS = PTHREADS_LIBS = endif -endif -ifeq "$(COMPILER)" "tcc" -ifeq "$(PLATFORM)" "LINUX" -PTHREADS_CFLAGS = -D_REENTRANT -PTHREADS_LDFLAGS = -PTHREADS_LIBS = -lpthread -endif -endif - -ifeq "$(COMPILER)" "pcc" +ifeq "$(COMPILER)" "icc" ifeq "$(PLATFORM)" "LINUX" PTHREADS_CFLAGS = -D_REENTRANT -pthread PTHREADS_LDFLAGS = -pthread @@ -262,12 +234,6 @@ PTHREADS_LIBS = endif endif -ifeq "$(COMPILER)" "icc" -ifeq "$(PLATFORM)" "LINUX" -PTHREADS_CFLAGS = -D_REENTRANT -pthread -PTHREADS_LDFLAGS = -pthread -PTHREADS_LIBS = -endif endif # set flags for position independend code (as required for shared libraries @@ -309,36 +275,36 @@ endif #endif #endif -CFLAGS = $(COMPILE_FLAGS) $(PLATFORM_COMPILE_FLAGS) $(INCLUDE_DIRS) $(PTHREADS_CFLAGS) -CCPPFLAGS = $(CCPP_COMPILE_FLAGS) $(PLATFORM_COMPILE_FLAGS) $(INCLUDE_DIRS) $(PTHREADS_CFLAGS) +ALL_CFLAGS = $(CFLAGS) $(COMPILE_FLAGS) $(PLATFORM_COMPILE_FLAGS) $(INCLUDE_DIRS) $(INCLUDE_CFLAGS) $(PTHREADS_CFLAGS) +ALL_CXXFLAGS = $(CXXFLAGS) $(CXX_COMPILE_FLAGS) $(PLATFORM_COMPILE_FLAGS) $(INCLUDE_DIRS) $(INCLUDE_CXXFLAGS) $(PTHREADS_CFLAGS) +ALL_LDFLAGS = $(LDFLAGS) $(INCLUDE_LDFLAGS) $(PTHREADS_LDFLAGS) $(LDFLAGS_NET) $(LDFLAGS_LT) $(LDFLAGS_DL) -LDFLAGS = $(INCLUDE_LDFLAGS) $(PTHREADS_LDFLAGS) $(LDFLAGS_NET) $(LDFLAGS_LT) -LIBS = $(INCLUDE_LIBS) $(PTHREADS_LIBS) $(LIBS_NET) $(LIBS_LT) +LIBS = $(INCLUDE_LIBS) $(PTHREADS_LIBS) $(LIBS_NET) $(LIBS_LT) $(LIBS_DL) LINK = $(CC) -CCPP_LINK = $(CCPP) +CXX_LINK = $(CXX) %.o : %.c - $(CC) -c -o $@ $(CFLAGS) $< + $(CC) -c -o $@ $(ALL_CFLAGS) $< %.o : %.cpp - $(CCPP) -c -o $@ $(CCPPFLAGS) $< + $(CXX) -c -o $@ $(ALL_CXXFLAGS) $< -%$(EXE): %.o $(OBJS) $(TEST_OBJS) - $(CCPP_LINK) -o $@ $(LDFLAGS) $(OBJS) $(TEST_OBJS) $< $(LIBS) +%$(EXE): %.o $(OBJS) $(CPP_OBJS) + $(CXX_LINK) -o $@ $(ALL_LDFLAGS) $(OBJS) $(CPP_OBJS) $< $(LIBS) %.sho : %.c - $(CC) -c -o $@ $(SO_COMPILE_FLAGS) -DSHARED $(CFLAGS) $< + $(CC) -c -o $@ $(SO_COMPILE_FLAGS) -DSHARED $(ALL_CFLAGS) $< #%$(SO) : %.sho $(OBJS) -# $(LINK) -shared -o $@ $(LDFLAGS) $(LIBS) $(OBJS) $< +# $(LINK) -shared -o $@ $(ALL_LDFLAGS) $(LIBS) $(OBJS) $< %.sho++ : %.cpp - $(CCPP) -c -o $@ $(SO_COMPILE_FLAGS) -DSHARED $(CCPPFLAGS) $< + $(CXX) -c -o $@ $(SO_COMPILE_FLAGS) -DSHARED $(ALL_CXXFLAGS) $< + +#%$(SO) : %.sho++ $(OBJS) $(CPP_OBJS) +# $(CXX_LINK) -shared -o $@ $(ALL_LDFLAGS) $(LIBS) $(OBJS) $(CPP_OBJS) $< -#%$(SO) : %.sho++ $(OBJS) $(CPPOBJS) -# $(CCPP_LINK) -shared -o $@ $(LDFLAGS) $(LIBS) $(OBJS) $(CPPOBJS) $< - -BIN_OBJS = $(BINS:$(EXE)=.o) +BIN_OBJS = $(BINS:$(EXE)=.o) TEST_BIN_OBJS = $(TEST_BINS:$(EXE)=.o) CPP_BIN_OBJS = $(CPP_BINS:$(EXE)=.o) TEST_CPP_BIN_OBJS = $(TEST_CPP_BINS:$(EXE)=.o) diff --git a/makefiles/gmake/depend.mk b/makefiles/gmake/depend.mk index eb832e7..411da66 100644 --- a/makefiles/gmake/depend.mk +++ b/makefiles/gmake/depend.mk @@ -2,7 +2,7 @@ # 'makedepend', 'gcc -MM' or similar mechanisms # # requires: -# - compilers CC and CCPP +# - compilers CC and CXX # - INCLUDEDIRS # - OBJS, CPP_OBJS and BIN_OBJS, CPP_BIN_OBJS # - TEST_BINS, TEST_BIN_OBJS, TEST_CPP_BINS, TEST_CPP_BIN_OBJS @@ -16,34 +16,12 @@ ifeq "$(COMPILER)" "gcc" %.d : %.c @echo Generating dependencies for $< - @$(CC) -DMAKE_DEPENDENCIES -MM -MT $(@:.d=.o) $(CFLAGS) $< | \ + @$(CC) -DMAKE_DEPENDENCIES -MM -MT $(@:.d=.o) $(ALL_CFLAGS) $< | \ sed "s,\($*\.o\)[ :]*\(.*\),$@ : $$\(wildcard \2\)\&\&\&\1 : \2,g" | tr -s '&' "\n" > $@ %.d : %.cpp @echo Generating dependencies for $< - @$(CCPP) -DMAKE_DEPENDENCIES -MM -MT $(@:.d=.o) $(CCPPFLAGS) $< | \ - sed "s,\($*\.o\)[ :]*\(.*\),$@ : $$\(wildcard \2\)\&\&\&\1 : \2,g" | tr -s '&' "\n" > $@ - -endif - -ifeq "$(COMPILER)" "tcc" - -%.d : %.c - @echo Generating dependencies for $< - @makedepend -DMAKE_DEPENDENCIES $(PLATFORM_COMPILE_FLAGS) $(INCLUDE_DIRS) -I/usr/lib/tcc/include -f - $< > $@ - -endif - -ifeq "$(COMPILER)" "icc" - -%.d : %.c - @echo Generating dependencies for $< - @$(CC) -DMAKE_DEPENDENCIES -MM -MT $(@:.d=.o) $(CFLAGS) $< | \ - sed "s,\($*\.o\)[ :]*\(.*\),$@ : $$\(wildcard \2\)\&\&\&\1 : \2,g" | tr -s '&' "\n" > $@ - -%.d : %.cpp - @echo Generating dependencies for $< - @$(CCPP) -DMAKE_DEPENDENCIES -MM -MT $(@:.d=.o) $(CCPPFLAGS) $< | \ + @$(CXX) -DMAKE_DEPENDENCIES -MM -MT $(@:.d=.o) $(ALL_CXXFLAGS) $< | \ sed "s,\($*\.o\)[ :]*\(.*\),$@ : $$\(wildcard \2\)\&\&\&\1 : \2,g" | tr -s '&' "\n" > $@ endif @@ -52,25 +30,24 @@ ifeq "$(COMPILER)" "spro" %.d : %.c @echo Generating dependencies for $< - @$(CC) -DMAKE_DEPENDENCIES -xM1 $(CFLAGS) $< > $@ + @$(CC) -DMAKE_DEPENDENCIES -xM1 $(ALL_CFLAGS) $< > $@ %.d : %.cpp @echo Generating dependencies for $< - @$(CCPP) -DMAKE_DEPENDENCIES -xM1 $(CCPPFLAGS) $< > $@ -endif - -ifeq "$(COMPILER)" "pcc" - -# FIXME: platform in path of compiler include files, mmh, how to fix? -%.d : %.c - @echo Generating dependencies for $< - @$(CC) -DMAKE_DEPENDENCIES $(CFLAGS) -M $< > $@ - + @$(CXX) -DMAKE_DEPENDENCIES -xM1 $(ALL_CXXFLAGS) $< > $@ endif +ifneq ($(MAKECMDGOALS),clean) +ifneq ($(MAKECMDGOALS),distclean) -include $(OBJS:.o=.d) -include $(CPP_OBJS:.o=.d) -include $(BIN_OBJS:.o=.d) -include $(CPP_BIN_OBJS:.o=.d) -include $(TEST_BIN_OBJS:.o=.d) -include $(TEST_CPP_BIN_OBJS:.o=.d) + +.PHONY: depend +depend: $(OBJS:.o=.d) $(CPP_OBJS:.o=.d) $(BIN_OBJS:.o=.d) $(CPP_BIN_OBJS:.o=.d) $(TEST_BIN_OBJS:.o=.d) $(TEST_CPP_BIN_OBJS:.o=.d) + +endif +endif diff --git a/makefiles/gmake/dist.mk b/makefiles/gmake/dist.mk index 85ceae7..dc80907 100644 --- a/makefiles/gmake/dist.mk +++ b/makefiles/gmake/dist.mk @@ -10,21 +10,24 @@ .PHONY: dist dist-bz2 dist-gz dist-Z +TMPDIR ?= /tmp + dist: -@rm -rf $(PACKAGE_NAME)-$(PACKAGE_VERSION) - -@rm -rf /tmp/$(PACKAGE_NAME)-$(PACKAGE_VERSION) - mkdir /tmp/$(PACKAGE_NAME)-$(PACKAGE_VERSION) - cp -r * /tmp/$(PACKAGE_NAME)-$(PACKAGE_VERSION)/. - -@cd /tmp/$(PACKAGE_NAME)-$(PACKAGE_VERSION) ; \ + -@rm -rf $(TMPDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION) + mkdir $(TMPDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION) + cp -r * $(TMPDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)/. + -@cd $(TMPDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION) ; \ $(MAKE) distclean ; \ rm -f makefiles/gmake/platform.mk.vars; \ + rm -f makefiles/gmake/platform.vars; \ find . -name .svn -exec rm -rf {} \; ; \ find . -name .git -exec rm -rf {} \; ; \ cd .. ; \ tar cvf $(PACKAGE_NAME)-$(PACKAGE_VERSION).tar \ $(PACKAGE_NAME)-$(PACKAGE_VERSION) - -@rm -rf /tmp/$(PACKAGE_NAME)-$(PACKAGE_VERSION) - @mv /tmp/$(PACKAGE_NAME)-$(PACKAGE_VERSION).tar . + -@rm -rf $(TMPDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION) + @mv $(TMPDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION).tar . dist-bz2: dist -@rm -rf $(PACKAGE_NAME)-$(PACKAGE_VERSION).bz2 diff --git a/makefiles/gmake/guess_env b/makefiles/gmake/guess_env index 2e4f3de..60e039a 100755 --- a/makefiles/gmake/guess_env +++ b/makefiles/gmake/guess_env @@ -1,103 +1,154 @@ #!/bin/sh -# operating system and major, minor version, more should not be necessary - -UNAME_SYSTEM=`(uname -s) 2>/dev/null` -UNAME_RELEASE=`(uname -r) 2>/dev/null` -UNAME_VERSION=`(uname -v) 2>/dev/null` -UNAME_MACHINE=`(uname -m) 2>/dev/null` - -case "$UNAME_SYSTEM.$UNAME_RELEASE" in - Linux*) PLATFORM=LINUX - OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` - OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2` - - if test -f /etc/arch-release; then - LINUX_DIST='arch' - LINUX_REV='current' - elif test -f /etc/debian_version; then - LINUX_DIST='debian' - LINUX_REV=`cat /etc/debian_version | cut -d . -f 1` - elif test -f /etc/slackware-version; then - LINUX_DIST='slackware' - LINUX_REV=`cat /etc/slackware-version | cut -d ' ' -f 2 | cut -d . -f 1` - elif test -f /etc/redhat-release; then - LINUX_DIST='redhat' - LINUX_REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*// | cut -f 1 -d .` - else - LINUX_DIST='unknown' - LINUX_REV='unknown' - fi - ;; - - FreeBSD*) PLATFORM=FREEBSD - OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` - OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2 | cut -d - -f 1` - ;; - - OpenBSD*) PLATFORM=OPENBSD - OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` - OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2 | cut -d - -f 1` - ;; - - NetBSD*) PLATFORM=NETBSD - OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` - OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2 | cut -d - -f 1` - ;; - - SunOS*) PLATFORM=SUNOS - OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` - OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2` - ;; - - CYGWIN_NT*) PLATFORM=CYGWIN - _tmp=`echo $UNAME_SYSTEM | cut -d - -f 2` - OS_MAJOR_VERSION=`echo $_tmp | cut -d . -f 1` - OS_MINOR_VERSION=`echo $_tmp | cut -d . -f 2` - ;; - - *) - PLATFORM=UNKNOWN - echo "Unknown platform '$UNAME_SYSTEM $UNAME_RELEASE'" - exit 1 -esac +# bail out fast if we already have a cache file, otherwise building is far too slow! -# the architecture - -case "$UNAME_MACHINE" in - i*86*) ARCH=x86 - ;; - x86_64) ARCH=x86_64 - ;; - sun4u) ARCH=sun4u - ;; - - *) ARCH=UNKNOWN - echo "Unknown architecture '$UNAME_MACHINE'" - exit 1 - -esac - -# get last line, old 'tail' syntax and POSIX syntax, both exist out there -if test "x${PLATFORM}" = "xSUNOS"; then - TAIL1='tail -1' +MAKEFILE_DIR="$3/$4" +if test -f "${MAKEFILE_DIR}/makefiles/gmake/platform.vars"; then + . "${MAKEFILE_DIR}/makefiles/gmake/platform.vars" else - TAIL1='tail -n 1' -fi -# the compiler and version + # operating system and major, minor version, more should not be necessary -# what compiler do we have (we can't relly on it's name as it may be a cc link to the binary!) -CC=$2 -(( $CC -v 2>&1 | $TAIL1 ) | grep -i GCC ) 2>/dev/null 1>/dev/null -if test $? = 0; then - COMPILER='gcc' -else - ( $CC -v | grep tcc ) 2>/dev/null 1>/dev/null + UNAME_SYSTEM=`(uname -s) 2>/dev/null` + UNAME_RELEASE=`(uname -r) 2>/dev/null` + UNAME_VERSION=`(uname -v) 2>/dev/null` + UNAME_MACHINE=`(uname -m) 2>/dev/null` + + case "$UNAME_SYSTEM.$UNAME_RELEASE" in + Linux*) PLATFORM=LINUX + OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` + OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2` + + # LSB-system? Check for lsb-release + if test -x /usr/bin/lsb_release; then + dist=`/usr/bin/lsb_release -i | cut -f 2` + rev=`/usr/bin/lsb_release -r | cut -f 2` + case "$dist" in + Ubuntu) + LINUX_DIST='ubuntu' + LINUX_REV=$rev + ;; + + Debian) + LINUX_DIST='debian' + LINUX_REV=`echo $rev | cut -f 1 -d.` + ;; + + SUSE*LINUX) + LINUX_DIST='suse' + LINUX_REV=`echo $rev | tr -s ' ' '\t' | cut -f 2 -d ' '` + ;; + + *) + LINUX_DIST='unknown' + LINUX_REV='unknown' + ;; + esac + else + # try the older way with release files in /etc + + if test -f /etc/arch-release; then + LINUX_DIST='arch' + LINUX_REV='current' + if test "$OS_MAJOR_VERSION" = "3"; then + OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2 | cut -d - -f 1` + fi + elif test -f /etc/debian_version; then + LINUX_DIST='debian' + LINUX_REV=`cat /etc/debian_version | cut -d . -f 1` + elif test -f /etc/slackware-version; then + LINUX_DIST='slackware' + LINUX_REV=`cat /etc/slackware-version | cut -d ' ' -f 2 | cut -d . -f 1,2` + elif test -f /etc/redhat-release; then + LINUX_DIST='redhat' + LINUX_REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*// | cut -f 1 -d .` + elif test -f /etc/fedora-release; then + LINUX_DIST='redhat' + LINUX_REV=`cat /etc/fedora-release | cut -f 3 -d ' '` + elif test -f /etc/SuSE-release; then + grep "SUSE Linux Enterprise Server" /etc/SuSE-release + if test $? = 0; then + LINUX_DIST='sles' + LINUX_REV=`grep VERSION /etc/SuSE-release | cut -f 3 -d ' '` + else + LINUX_DIST='suse' + LINUX_REV=`grep VERSION /etc/SuSE-release | cut -f 3 -d ' '` + fi + else + LINUX_DIST='unknown' + LINUX_REV='unknown' + fi + fi + ;; + + FreeBSD*) PLATFORM=FREEBSD + OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` + OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2 | cut -d - -f 1` + ;; + + OpenBSD*) PLATFORM=OPENBSD + OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` + OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2 | cut -d - -f 1` + ;; + + NetBSD*) PLATFORM=NETBSD + OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` + OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2` + ;; + + SunOS*) PLATFORM=SUNOS + OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1` + OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2` + ;; + + CYGWIN_NT*) PLATFORM=CYGWIN + _tmp=`echo $UNAME_SYSTEM | cut -d - -f 2` + OS_MAJOR_VERSION=`echo $_tmp | cut -d . -f 1` + OS_MINOR_VERSION=`echo $_tmp | cut -d . -f 2` + ;; + + *) + PLATFORM=UNKNOWN + echo "Unknown platform '$UNAME_SYSTEM $UNAME_RELEASE'" + exit 1 + esac + + # the architecture + + case "$UNAME_MACHINE" in + i*86*) ARCH=x86 + ;; + x86_64|amd64) ARCH=x86_64 + ;; + sun4u) ARCH=sun4u + ;; + + *) ARCH=UNKNOWN + echo "Unknown architecture '$UNAME_MACHINE'" + exit 1 + + esac + + # get last line, old 'tail' syntax and POSIX syntax, both exist out there + if test "x${PLATFORM}" = "xSUNOS"; then + TAIL1='tail -1' + else + TAIL1='tail -n 1' + fi + + # the compiler and version + + # do we have ccache or distcc in CC, then check the compiler, not the wrapper + CC=$2 + CC=`echo $CC | sed 's/distcc//g' | sed 's/ccache//g'` + + # what compiler do we have (we can't relly on it's name as it may be a cc link to the binary!) + (( $CC -v 2>&1 | $TAIL1 ) | grep -i GCC ) 2>/dev/null 1>/dev/null if test $? = 0; then - COMPILER='tcc' + COMPILER='gcc' else - ( $CC -V 2>&1 | grep l_cproc_p ) >/dev/null + # ( $CC -V 2>&1 | grep l_cproc_p ) >/dev/null + ( $CC -V 2>&1 | grep "Intel(R) C" | grep "Compiler" ) >/dev/null if test $? = 0; then COMPILER='icc' else @@ -105,120 +156,102 @@ else if test $? = 0; then COMPILER='spro' else - ( $CC -v | head -n 1 | grep 'pcc' ) >/dev/null - if test $? = 0; then - COMPILER='pcc' - else - COMPILER='unknown' - fi + COMPILER='unknown' fi fi fi -fi - -# version of gcc (GNU C compiler) -if test $COMPILER = "gcc"; then - GCC_VERSION=`gcc -dumpversion` - GCC_MAJOR_VERSION=`echo $GCC_VERSION | cut -d . -f 1` - GCC_MINOR_VERSION=`echo $GCC_VERSION | cut -d . -f 2` -fi + # version of gcc (GNU C compiler) -# version of tcc (Tiny C compiler) + if test $COMPILER = "gcc"; then + GCC_VERSION=`gcc -dumpversion` + GCC_MAJOR_VERSION=`echo $GCC_VERSION | cut -d . -f 1` + GCC_MINOR_VERSION=`echo $GCC_VERSION | cut -d . -f 2` + fi -if test $COMPILER = "tcc"; then - TCC_VERSION=`tcc -v | cut -d ' ' -f 3` - TCC_MAJOR_VERSION=`echo $ICC_VERSION | cut -d . -f 1` - TCC_MINOR_VERSION=`echo $ICC_VERSION | cut -d . -f 2` -fi + # version of icc (Intel C compiler) -# version of icc (Intel C compiler) + if test $COMPILER = "icc"; then + ICC_VERSION=`icc -dumpversion` + ICC_MAJOR_VERSION=`echo $ICC_VERSION | cut -d . -f 1` + ICC_MINOR_VERSION=`echo $ICC_VERSION | cut -d . -f 2` + fi -if test $COMPILER = "icc"; then - ICC_VERSION=`icc -dumpversion` - ICC_MAJOR_VERSION=`echo $ICC_VERSION | cut -d . -f 1` - ICC_MINOR_VERSION=`echo $ICC_VERSION | cut -d . -f 2` -fi + # version of spro (Sun Pro compiler, Sun Studio) -# version of spro (Sun Pro compiler, Sun Studio) + if test $COMPILER = "spro"; then + SPRO_VERSION=`$CC -xhelp=readme | head -n 1 | cut -d ' ' -f 3` + SPRO_MAJOR_VERSION=`echo $SPRO_VERSION | cut -d : -f 1` + fi -if test $COMPILER = "spro"; then - SPRO_VERSION=`$CC -xhelp=readme | head -n 1 | cut -d ' ' -f 3` - SPRO_MAJOR_VERSION=`echo $SPRO_VERSION | cut -d : -f 1` -fi + # generate the makefile snippet with conditional variables + # (conditional, so that users can overwrite them for instance + # for cross-compilation) + cat >"${MAKEFILE_DIR}/makefiles/gmake/platform.mk.vars" <"${MAKEFILE_DIR}/makefiles/gmake/platform.vars" <"${MAKEFILE_DIR}/makefiles/gmake/platform.mk.vars" <