mirror of
				https://github.com/pocoproject/poco.git
				synced 2025-10-28 19:51:58 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			329 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			329 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #
 | |
| # global
 | |
| #
 | |
| # Global build configuration
 | |
| #
 | |
| # Environment variables:
 | |
| # POCO_BASE:   Path to POCO source tree. Must be defined.
 | |
| # POCO_BUILD:  Path to directory where build files are put.
 | |
| #              Defaults to $(POCO_BASE)
 | |
| # POCO_CONFIG: Build configuration to use.
 | |
| #              Defaults to `uname`.
 | |
| # POCO_TARGET_OSNAME: Target system operating system name (for cross builds)
 | |
| # POCO_TARGET_OSARCH: Target system architecture (forr cross builds)
 | |
| #
 | |
| 
 | |
| #
 | |
| # Check for POCO_BASE
 | |
| #
 | |
| ifndef POCO_BASE
 | |
| $(error POCO_BASE is not defined.)
 | |
| endif
 | |
| 
 | |
| #
 | |
| # Include some optional make configuration
 | |
| #
 | |
| sinclude $(POCO_BASE)/config.build
 | |
| 
 | |
| #
 | |
| # Check for PROJECT_BASE
 | |
| #
 | |
| ifndef PROJECT_BASE
 | |
| PROJECT_BASE = $(POCO_BASE)
 | |
| endif
 | |
| export PROJECT_BASE
 | |
| ifdef POCO_VERBOSE
 | |
| $(info PROJECT_BASE        = $(PROJECT_BASE))
 | |
| endif
 | |
| 
 | |
| #
 | |
| # Check for POCO_BUILD
 | |
| #
 | |
| ifndef POCO_BUILD
 | |
| POCO_BUILD = $(PROJECT_BASE)
 | |
| endif
 | |
| export POCO_BUILD
 | |
| ifdef POCO_VERBOSE
 | |
| $(info POCO_BUILD          = $(POCO_BUILD))
 | |
| endif
 | |
| 
 | |
| #
 | |
| # POCO_BASE/POCO_BUILD/cwd sanity checks
 | |
| #
 | |
| # Ensure that the current working directory is either
 | |
| # under $POCO_BASE or under $PROJECT_BASE
 | |
| # Also, if we're building under $POCO_BASE, disarm
 | |
| # $PROJECT_BASE
 | |
| #
 | |
| cwd = $(shell pwd)
 | |
| inpoco = $(shell echo | awk '{print index("$(cwd)","$(POCO_BASE)")}')
 | |
| inproj = $(shell echo | awk '{print index("$(cwd)","$(PROJECT_BASE)")}')
 | |
| ifneq ($(inpoco),0)
 | |
| PROJECT_BASE = $(POCO_BASE)
 | |
| else
 | |
| ifneq ($(inproj),0)
 | |
| else
 | |
| $(error Current working directory not under $$PROJECT_BASE)
 | |
| endif
 | |
| endif
 | |
| 
 | |
| #
 | |
| # Determine OS
 | |
| #
 | |
| POCO_HOST_OSNAME = $(shell uname)
 | |
| ifeq ($(findstring CYGWIN,$(POCO_HOST_OSNAME)),CYGWIN)
 | |
| POCO_HOST_OSNAME = CYGWIN
 | |
| endif
 | |
| 
 | |
| ifeq ($(findstring MINGW,$(POCO_HOST_OSNAME)),MINGW)
 | |
| POCO_HOST_OSNAME = MinGW
 | |
| endif
 | |
| ifdef POCO_VERBOSE
 | |
| $(info POCO_HOST_OSNAME    = $(POCO_HOST_OSNAME))
 | |
| endif
 | |
| 
 | |
| POCO_HOST_OSARCH ?= $(subst /,-,$(shell uname -m | tr ' ' _))
 | |
| ifdef POCO_VERBOSE
 | |
| $(info POCO_HOST_OSARCH    = $(POCO_HOST_OSARCH))
 | |
| endif
 | |
| 
 | |
| #
 | |
| # Begin Sun platforms
 | |
| #
 | |
| # Pure Solaris or GNU (Nexenta), Sun Forte and Sun Studio compilers supported
 | |
| # (on Nexenta, the default compiler is g++)
 | |
| #
 | |
| ifndef POCO_CONFIG
 | |
|   ifeq ($(findstring SunOS,$(POCO_HOST_OSNAME)),SunOS)
 | |
|     # detect if this is Nexenta platform
 | |
|     POCO_HOST_ALL_OSNAME := $(shell uname -a)
 | |
|     ifeq ($(findstring Nexenta,$(POCO_HOST_ALL_OSNAME)),Nexenta)
 | |
|       POCO_HOST_OSNAME := Nexenta
 | |
|     else # Up to version 5.5 SunOS-SunForte config is used, 5.6 and above use SunOS-SunStudio
 | |
|       POCO_COMPILER_NAME := $(shell CC -V 2>&1)
 | |
|       POCO_COMPILER_VERSION := $(subst .,,$(filter 5.%,$(POCO_COMPILER_NAME)))
 | |
| 
 | |
|       ifeq (0, $(shell test $(POCO_COMPILER_VERSION) -gt 55; echo $$?))
 | |
|         POCO_CONFIG := SunOS-SunStudio
 | |
|       else
 | |
|         POCO_CONFIG := SunOS-SunForte
 | |
|       endif
 | |
|     endif
 | |
|   endif
 | |
| endif
 | |
| #
 | |
| # End Sun Platforms
 | |
| #
 | |
| 
 | |
| #
 | |
| # If POCO_CONFIG is not set, use the OS name as configuration name
 | |
| #
 | |
| ifndef POCO_CONFIG
 | |
| POCO_CONFIG = $(POCO_HOST_OSNAME)
 | |
| endif
 | |
| ifdef POCO_VERBOSE
 | |
| $(info POCO_CONFIG         = $(POCO_CONFIG))
 | |
| endif
 | |
| 
 | |
| #
 | |
| # Include System Specific Settings
 | |
| #
 | |
| include $(POCO_BASE)/build/config/$(POCO_CONFIG)
 | |
| 
 | |
| #
 | |
| # Determine operating system
 | |
| #
 | |
| ifndef POCO_TARGET_OSNAME
 | |
| OSNAME   := $(POCO_HOST_OSNAME)
 | |
| else
 | |
| OSNAME   := $(POCO_TARGET_OSNAME)
 | |
| endif
 | |
| ifdef POCO_VERBOSE
 | |
| $(info OSNAME              = $(OSNAME))
 | |
| endif
 | |
| 
 | |
| ifndef POCO_TARGET_OSARCH
 | |
| OSARCH   := $(subst /,-,$(shell uname -m | tr ' ' _))
 | |
| else
 | |
| OSARCH   := $(POCO_TARGET_OSARCH)
 | |
| endif
 | |
| ifdef POCO_VERBOSE
 | |
| $(info OSARCH              = $(OSARCH))
 | |
| endif
 | |
| 
 | |
| HOSTNAME := $(shell hostname)
 | |
| 
 | |
| #
 | |
| # Check if a 64bit build is requested
 | |
| #
 | |
| ifndef OSARCH_64BITS
 | |
| OSARCH_64BITS = 0
 | |
| endif
 | |
| 
 | |
| ifeq ($(OSARCH_64BITS),1)
 | |
| OSARCH_POSTFIX = 64
 | |
| else
 | |
| OSARCH_POSTFIX =
 | |
| endif
 | |
| 
 | |
| #
 | |
| # Detect distro
 | |
| #
 | |
| 
 | |
| # Fedora, Redhat, Centos.
 | |
| REDHATISH = $(if $(wildcard /etc/redhat-release /etc/centos-release /etc/fedora-release),1)
 | |
| # Debian, Ubuntu
 | |
| DEBIANISH = $(if $(wildcard /etc/debian_version),1)
 | |
| 
 | |
| #
 | |
| # Adjust suffix for 64-bit lib directory
 | |
| #
 | |
| ifneq ($(REDHATISH),)
 | |
| LIB64SUFFIX = $(if $(filter $(OSARCH),x86_64 sparc64 ppc64),64,)
 | |
| else ifneq ($(DEBIANISH),)
 | |
| LIB64SUFFIX = $(if $(filter $(OSARCH),x86_64 sparc64 ppc64),/x86_64-linux-gnu,)
 | |
| endif
 | |
| 
 | |
| # Default static lib extension
 | |
| STATICLIBLINKEXT = .a
 | |
| 
 | |
| #
 | |
| # Find out current component
 | |
| #
 | |
| COMPONENT := $(shell $(POCO_BASE)/build/script/projname "$(PROJECT_BASE)")
 | |
| 
 | |
| #
 | |
| # Define standard directories
 | |
| #
 | |
| SRCDIR   = src
 | |
| INCDIR   = include
 | |
| LIBDIR   = lib/$(OSNAME)/$(OSARCH)
 | |
| BINDIR   = bin/$(OSNAME)/$(OSARCH)
 | |
| OBJDIR   = obj/$(OSNAME)/$(OSARCH)
 | |
| DEPDIR   = .dep/$(OSNAME)/$(OSARCH)
 | |
| LIBPATH  = $(POCO_BUILD)/$(LIBDIR)
 | |
| BINPATH  = $(POCO_BUILD)/$(COMPONENT)/$(BINDIR)
 | |
| OBJPATH  = $(POCO_BUILD)/$(COMPONENT)/$(OBJDIR)
 | |
| DEPPATH  = $(POCO_BUILD)/$(COMPONENT)/$(DEPDIR)
 | |
| 
 | |
| POCO_HOST_BINDIR    = bin/$(POCO_HOST_OSNAME)/$(POCO_HOST_OSARCH)
 | |
| POCO_TARGET_BINDIR  = $(BINDIR)
 | |
| POCO_HOST_BINPATH   = $(POCO_BUILD)/$(POCO_HOST_BINDIR)
 | |
| POCO_TARGET_BINPATH = $(BINPATH)
 | |
| POCO_HOST_LIBDIR    = lib/$(POCO_HOST_OSNAME)/$(POCO_HOST_OSARCH)
 | |
| POCO_TARGET_LIBDIR  = $(LIBDIR)
 | |
| POCO_HOST_LIBPATH   = $(POCO_BUILD)/$(POCO_HOST_LIBDIR)
 | |
| POCO_TARGET_LIBPATH = $(LIBPATH)
 | |
| ifdef POCO_PREFIX
 | |
| POCO_LIB_INSTALLDIR = $(POCO_PREFIX)/lib
 | |
| else
 | |
| POCO_LIB_INSTALLDIR = $(LIBPATH)
 | |
| endif
 | |
| ifdef POCO_VERBOSE
 | |
| $(info POCO_LIB_INSTALLDIR = $(POCO_LIB_INSTALLDIR))
 | |
| endif
 | |
| 
 | |
| ifeq ($(POCO_BASE),$(PROJECT_BASE))
 | |
| POCO_LIBRARY =
 | |
| else
 | |
| POCO_LIBRARY = -L$(POCO_BASE)/$(LIBDIR)
 | |
| endif
 | |
| 
 | |
| ifndef LIBPREFIX
 | |
| LIBPREFIX = lib
 | |
| endif
 | |
| 
 | |
| ifeq ($(POCO_HOST_LIBPATH),$(POCO_BASE)/$(POCO_HOST_LIBDIR))
 | |
| LD_LIBRARY_PATH = $(POCO_HOST_LIBPATH)
 | |
| else
 | |
| LD_LIBRARY_PATH = $(POCO_HOST_LIBPATH):$(POCO_BASE)/$(POCO_HOST_LIBDIR)
 | |
| endif
 | |
| ifeq ($(POCO_HOST_OSNAME),Darwin)
 | |
| SET_LD_LIBRARY_PATH = DYLD_LIBRARY_PATH=$(LD_LIBRARY_PATH)
 | |
| else
 | |
| SET_LD_LIBRARY_PATH = LD_LIBRARY_PATH=$(LD_LIBRARY_PATH)
 | |
| endif
 | |
| 
 | |
| #
 | |
| # Build component list
 | |
| #
 | |
| COMPONENTS := $(shell cat $(POCO_BASE)/components)
 | |
| 
 | |
| #
 | |
| # Read global library version number
 | |
| #
 | |
| LIBVERSION := $(shell cat $(POCO_BASE)/libversion)
 | |
| 
 | |
| #
 | |
| # Determine link mode
 | |
| #
 | |
| ifndef LINKMODE
 | |
| LINKMODE = BOTH
 | |
| endif
 | |
| 
 | |
| ifeq ($(LINKMODE),SHARED)
 | |
| DEFAULT_TARGET = all_shared
 | |
| endif
 | |
| ifeq ($(LINKMODE),STATIC)
 | |
| DEFAULT_TARGET = all_static
 | |
| endif
 | |
| ifeq ($(LINKMODE),BOTH)
 | |
| DEFAULT_TARGET = all_static all_shared
 | |
| endif
 | |
| 
 | |
| #
 | |
| # Compose compiler flags
 | |
| #
 | |
| COMMONFLAGS = -DPOCO_BUILD_HOST='"'$(HOSTNAME)'"' -DPOCO_TARGET_OSNAME='"'$(OSNAME)'"' -DPOCO_TARGET_OSARCH='"'$(OSARCH)'"' $(POCO_FLAGS)
 | |
| CFLAGS     += $(COMMONFLAGS) $(SYSFLAGS)
 | |
| CXXFLAGS   += $(COMMONFLAGS) $(SYSFLAGS)
 | |
| LINKFLAGS  += $(COMMONFLAGS) $(SYSFLAGS)
 | |
| 
 | |
| ifeq ($(OSARCH_64BITS),1)
 | |
| CFLAGS     += $(CFLAGS64)
 | |
| CXXFLAGS   += $(CXXFLAGS64)
 | |
| SHLIBFLAGS += $(SHLIBFLAGS64)
 | |
| DYLIBFLAGS += $(DYLIBFLAGS64)
 | |
| LINKFLAGS  += $(LINKFLAGS64)
 | |
| else
 | |
| CFLAGS     += $(CFLAGS32)
 | |
| CXXFLAGS   += $(CXXFLAGS32)
 | |
| SHLIBFLAGS += $(SHLIBFLAGS32)
 | |
| DYLIBFLAGS += $(DYLIBFLAGS32)
 | |
| LINKFLAGS  += $(LINKFLAGS32)
 | |
| endif
 | |
| 
 | |
| #
 | |
| # Compose object file path
 | |
| #
 | |
| OBJPATH_RELEASE_STATIC = $(OBJPATH)/release_static$(OSARCH_POSTFIX)
 | |
| OBJPATH_DEBUG_STATIC   = $(OBJPATH)/debug_static$(OSARCH_POSTFIX)
 | |
| OBJPATH_RELEASE_SHARED = $(OBJPATH)/release_shared$(OSARCH_POSTFIX)
 | |
| OBJPATH_DEBUG_SHARED   = $(OBJPATH)/debug_shared$(OSARCH_POSTFIX)
 | |
| 
 | |
| #
 | |
| # Build Include directory List
 | |
| #
 | |
| INCLUDE = -Iinclude $(foreach p,$(COMPONENTS),-I$(POCO_BASE)/$(p)/$(INCDIR)) $(foreach p,$(POCO_ADD_INCLUDE),-I$(p))
 | |
| 
 | |
| #
 | |
| # Build Library Directory List
 | |
| #
 | |
| LIBRARY = -L$(LIBPATH) $(POCO_LIBRARY) $(foreach p,$(POCO_ADD_LIBRARY),-L$(p))
 | |
| 
 | |
| #
 | |
| # Strip Command definition
 | |
| #
 | |
| ifeq ($(strip $(STRIP)),)
 | |
| STRIPCMD = 
 | |
| else
 | |
| STRIPCMD = $(STRIP) $@$(BINEXT)
 | |
| endif
 | |
| 
 | |
| #
 | |
| # Make CC and CXX environment vars
 | |
| #
 | |
| export CC
 | |
| export CXX
 | |
| export LINK
 | 
