diff --git a/harbour/ChangeLog b/harbour/ChangeLog index fcd6250392..bd599d83bf 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,46 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-08-26 17:55 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + + config/detfun.mk + + config/detect.mk + * config/global.mk + + Added generic external component detection function. + + Added central detection for optional external components + used by Harbour core. These are: openssl, gpm, slang, curses, x11 + Easy to extend with new ones. + The detection code will run once per make session and + results can be used in all our make files by checking HB_HAS_* + variable. If it's empty we cannot use the component, if + it's not we can. In this case it contains dir where headers + were located. It's possible that it's a list of paths. + Users can control these components by using HB_INC_* variable + the following way: if it's left empty, Harbour make system + will automatically look into default locations, this usually + works on *nix systems. If set to a path (or a list of paths), + this list will be checked. Finally to explicitly disable a + component, user can set the variable to 'no'. + Following legacy control variables are yet understood, but + the will be removed in the near future: + HB_WITHOUT_GTCRS=yes is the same as HB_INC_CURSES=no + HB_WITHOUT_SLANG=yes is the same as HB_INC_SLANG=no + HB_WITHOUT_GTXWC=yes is the same as HB_INC_X11=no + Notice that these settings aren't meant to allow user control + of actual Harbour components (like gtxwc). If we need something + like this, we can do it, but it wasn't the subject of this change. + HB_GPM_MOUSE var is still set for compatibility with internals. + NOTE: I've left verbose output on to see what's happening, this will + tuned after testing. + ; TODO: Remove reliance on legacy settings in our own codebase. + ; TODO: Start using HB_HAS_* values for dynamic lib syslib list assembly + and in GT Makefiles. + + * contrib/hbtip/hbtipssl/Makefile + * contrib/hbtip/Makefile + * contrib/hbssl/Makefile + * HB_HAS_OPENSSL works a little differently now, not empty + means 'yes', empty means 'no'. + 2009-08-26 13:47 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/source/rtl/filebuf.c * reverted the alternative IO API look up order diff --git a/harbour/config/detect.mk b/harbour/config/detect.mk new file mode 100644 index 0000000000..133992ed0a --- /dev/null +++ b/harbour/config/detect.mk @@ -0,0 +1,146 @@ +# +# $Id$ +# + +# --------------------------------------------------------------- +# Copyright 2009 Viktor Szakats (harbour.01 syenar.hu) +# See COPYING for licensing terms. +# +# This make file will detect optional external components +# used in Harbour core code. +# --------------------------------------------------------------- + +# NOTE: +# INPUT: +# HB_INC_* variable with following possible contents: +# (empty) - Will enable external component if found on default locations +# no - Will disable external component +# - Will specify locations to check for the external component +# OUTPUT: +# HB_HAS_* variable with following possible contents: +# (empty) - We can't use this component +# - Component headers were found at these locations +# config/conf.mk if found, will + +ifeq ($(DETECT_MK_),) +export DETECT_MK_ := yes + +# Reset everything to default +export HB_HAS_OPENSSL := +export HB_HAS_GPM := +export HB_HAS_SLANG := +export HB_HAS_CURSES := +export HB_HAS_X11 := + +# Allow detection by external (generated) config file + +-include $(TOP)$(ROOT)config/conf.mk + +# Exclude Harbour-wide features prohibiting commercial use + +ifeq ($(HB_COMMERCE),yes) + export HB_INC_GPM := no + export HB_INC_SLANG := no +endif + +# Compatibility inputs (deprecated) + +ifeq ($(HB_WITHOUT_GTCRS),yes) + export HB_INC_CURSES := no +endif +ifeq ($(HB_WITHOUT_SLANG),yes) + export HB_INC_SLANG := no +endif +ifeq ($(HB_WITHOUT_GTXWC),yes) + export HB_INC_X11 := no +endif + +# Detect OpenSSL + +_DET_DSP_NAME := OpenSSL +_DET_VAR_INC_ := HB_INC_OPENSSL +_DET_VAR_HAS_ := HB_HAS_OPENSSL +_DET_UNS_PLAT := dos +_DET_UNS_COMP := watcom +_DET_INC_DEFP := /usr/include /usr/local/ssl/include +_DET_INC_HEAD := /openssl/ssl.h + +include $(TOP)$(ROOT)config/detfun.mk + +# Detect GPM mouse + +_DET_DSP_NAME := GPM +_DET_VAR_INC_ := HB_INC_GPM +_DET_VAR_HAS_ := HB_HAS_GPM +_DET_UNS_PLAT := linux +_DET_UNS_COMP := +_DET_INC_DEFP := /usr/include /usr/local/include +_DET_INC_HEAD := /gpm.h + +include $(TOP)$(ROOT)config/detfun.mk + +# Detect slang + +_DET_DSP_NAME := slang +_DET_VAR_INC_ := HB_INC_SLANG +_DET_VAR_HAS_ := HB_HAS_SLANG +_DET_UNS_PLAT := +_DET_UNS_COMP := +_DET_INC_DEFP := +_DET_INC_HEAD := /slang.h + +ifeq ($(HB_LOCAL_SLN),yes) + _DET_INC_DEFP += /usr/local/include /usr/local/include/slang +else + _DET_INC_DEFP += /usr/include /usr/include/slang + _DET_INC_DEFP += /usr/usr/local/include /usr/local/include/slang + _DET_INC_DEFP += /sw/include /sw/include/slang + _DET_INC_DEFP += /opt/local/include /opt/local/include/slang +endif + +include $(TOP)$(ROOT)config/detfun.mk + +# Detect curses + +_DET_DSP_NAME := curses +_DET_VAR_INC_ := HB_INC_CURSES +_DET_VAR_HAS_ := HB_HAS_CURSES +_DET_UNS_PLAT := os2 +_DET_UNS_COMP := +_DET_INC_DEFP := +_DET_INC_HEAD := /curses.h + +ifeq ($(HB_NCURSES_194),yes) + _DET_INC_DEFP += /usr/include/ncur194 +else + _DET_INC_DEFP += /usr/include /usr/local/include /sw/include /opt/local/include +endif +ifeq ($(HB_COMPILER),djgpp) + _DET_INC_DEFP += $(foreach d, $(subst $(PTHSEP), ,$(PATH)), $(d)/../include) +endif + +include $(TOP)$(ROOT)config/detfun.mk + +# Detect X11 + +_DET_DSP_NAME := X11 +_DET_VAR_INC_ := HB_INC_X11 +_DET_VAR_HAS_ := HB_HAS_X11 +_DET_UNS_PLAT := +_DET_UNS_COMP := +_DET_INC_DEFP := /usr/include +_DET_INC_HEAD := /X11/Xlib.h + +include $(TOP)$(ROOT)config/detfun.mk + +# Finished + +# Compatibility outputs (deprecated) + +ifeq ($(HB_HAS_GPM),) + HB_GPM_MOUSE := no +else + HB_GPM_MOUSE := yes +endif + +endif # DETECT_MK_ diff --git a/harbour/config/detfun.mk b/harbour/config/detfun.mk new file mode 100644 index 0000000000..d88c96b390 --- /dev/null +++ b/harbour/config/detfun.mk @@ -0,0 +1,51 @@ +# +# $Id$ +# + +# --------------------------------------------------------------- +# Copyright 2009 Viktor Szakats (harbour.01 syenar.hu) +# See COPYING for licensing terms. +# +# This make file will detect optional external components +# used in Harbour core code. Generic function. +# --------------------------------------------------------------- + +# Show verbose information +_DET_SHOW_RES := yes + +ifeq ($(_DET_SHOW_RES),yes) + do_info = $(info ! Component: $(1)) +else + do_info = +endif + +ifeq ($($(_DET_VAR_HAS_)),) + ifneq ($($(_DET_VAR_INC_)),no) + ifeq ($(filter $(HB_PLATFORM),$(_DET_UNS_PLAT)),) + ifeq ($(filter $(HB_COMPILER),$(_DET_UNS_COMP)),) + $(_DET_VAR_HAS_) := $($(_DET_VAR_INC_)) + ifeq ($($(_DET_VAR_HAS_)),) + ifeq ($(HB_XBUILD),) + $(_DET_VAR_HAS_) := $(_DET_INC_DEFP) + endif + endif + ifneq ($($(_DET_VAR_HAS_)),) + $(_DET_VAR_HAS_) := $(strip $(foreach d,$($(_DET_VAR_HAS_)),$(if $(wildcard $(d)$(_DET_INC_HEAD)),$(d),))) + ifeq ($($(_DET_VAR_HAS_)),) + $(call do_info,$(_DET_DSP_NAME) not found) + else + $(call do_info,$(_DET_DSP_NAME) found in $($(_DET_VAR_HAS_))) + endif + else + $(call do_info,$(_DET_DSP_NAME) location not specified) + endif + else + $(call do_info,$(_DET_DSP_NAME) not supported with $(HB_COMPILER) compiler) + endif + else + $(call do_info,$(_DET_DSP_NAME) not supported on $(HB_PLATFORM) platform) + endif + else + $(call do_info,$(_DET_DSP_NAME) explicitly deselected) + endif +endif diff --git a/harbour/config/global.mk b/harbour/config/global.mk index 2c5b9bc92c..0f889dac73 100644 --- a/harbour/config/global.mk +++ b/harbour/config/global.mk @@ -27,8 +27,8 @@ # NOTE: $(realpath/abspath) need GNU Make 3.81 or upper # NOTE: $(eval) needs GNU Make 3.80 or upper -ifeq ($(GLOBAL_CF_),) -GLOBAL_CF_ := yes +ifeq ($(GLOBAL_MK_),) +GLOBAL_MK_ := yes HB_VER_MAJOR := 2 HB_VER_MINOR := 0 @@ -36,8 +36,6 @@ HB_VER_RELEASE := 0 HB_VER_STATUS := beta2 HB_VER_STATUS_SH := b2 --include $(TOP)$(ROOT)config/conf.mk - # Arbitrary pattern which we don't expect to occur in real-world path names substpat := !@!@ @@ -1073,43 +1071,7 @@ ifneq ($(HB_HOST_PLAT)$(HB_HOST_CPU),$(HB_PLATFORM)$(HB_CPU)) endif endif -# Exclude Harbour-wide features prohibiting commercial usage -ifeq ($(HB_COMMERCE),yes) - export HB_GPM_MOUSE := no - export HB_WITHOUT_GTSLN := yes -endif - -# Detect OpenSSL lib -ifeq ($(HB_HAS_OPENSSL),) - HB_HAS_OPENSSL := no - ifneq ($(HB_PLATFORM),dos) - ifneq ($(HB_COMPILER),watcom) - ifeq ($(HB_INC_OPENSSL),) - ifeq ($(HB_XBUILD),) - HB_INC_OPENSSL := /usr/include /usr/local/ssl/include - endif - endif - HB_INC_OPENSSL := $(strip $(foreach d,$(HB_INC_OPENSSL),$(if $(wildcard $(d)/openssl/ssl.h),$(d),))) - ifneq ($(HB_INC_OPENSSL),) - HB_HAS_OPENSSL := yes - export HB_INC_OPENSSL - endif - endif - endif - export HB_HAS_OPENSSL -endif - -# Detect GPM mouse lib -ifeq ($(HB_GPM_MOUSE),) - HB_GPM_MOUSE := no - ifeq ($(HB_INC_GPM),) - HB_INC_GPM := /usr/include /usr/local/include - endif - ifneq ($(strip $(foreach d,$(HB_INC_GPM),$(if $(wildcard $(d)/gpm.h),$(d),))),) - HB_GPM_MOUSE := yes - endif - export HB_GPM_MOUSE -endif +include $(TOP)$(ROOT)config/detect.mk # Names of portable GT drivers HB_GT_LIBS := \ @@ -1330,4 +1292,4 @@ include $(TOP)$(ROOT)config/globsh.mk endif -endif # GLOBAL_CF_ +endif # GLOBAL_MK_ diff --git a/harbour/contrib/hbssl/Makefile b/harbour/contrib/hbssl/Makefile index 12466b9305..0a4bb75154 100644 --- a/harbour/contrib/hbssl/Makefile +++ b/harbour/contrib/hbssl/Makefile @@ -8,7 +8,7 @@ include $(TOP)$(ROOT)config/global.mk LIBNAME := hbssl -ifeq ($(HB_HAS_OPENSSL),yes) +ifneq ($(HB_HAS_OPENSSL),) HB_CFLAGS += -I$(HB_INC_OPENSSL) ifeq ($(HB_PLATFORM),darwin) diff --git a/harbour/contrib/hbtip/Makefile b/harbour/contrib/hbtip/Makefile index 07468d6040..46f276317c 100644 --- a/harbour/contrib/hbtip/Makefile +++ b/harbour/contrib/hbtip/Makefile @@ -42,7 +42,7 @@ INSTALL_RULE_HEADERS := $(INSTALL_RULE) include $(TOP)$(ROOT)config/lib.mk DIRS := -ifeq ($(HB_HAS_OPENSSL),yes) +ifneq ($(HB_HAS_OPENSSL),) DIRS += hbtipssl endif diff --git a/harbour/contrib/hbtip/hbtipssl/Makefile b/harbour/contrib/hbtip/hbtipssl/Makefile index 5d0eedc383..9875bb2d2c 100644 --- a/harbour/contrib/hbtip/hbtipssl/Makefile +++ b/harbour/contrib/hbtip/hbtipssl/Makefile @@ -11,7 +11,7 @@ vpath %.prg ../ LIBNAME := hbtipssl -ifeq ($(HB_HAS_OPENSSL),yes) +ifneq ($(HB_HAS_OPENSSL),) HB_PRGFLAGS += -DHB_HAS_OPENSSL HB_INC_DEPEND := -I$(TOP)$(ROOT)contrib/hbssl