# Makefile.common - common definitions for the winsup directory
#
# Copyright 2000 Red Hat, Inc.
#
# This file is part of Cygwin.
#
# This software is a copyrighted work licensed under the terms of the
# Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
# details.

# This makefile requires GNU make.

CFLAGS_COMMON:=-Wall -Wwrite-strings # -finline-functions
MALLOC_DEBUG:=#-DMALLOC_DEBUG -I/cygnus/src/sourceware/winsup/cygwin/dlmalloc
MALLOC_OBJ:=#/cygnus/src/sourceware/winsup/cygwin/dlmalloc/malloc.o

override srcdir:=${shell cd $(srcdir); pwd}
ifneq (,${filter-out /%,$(srcdir)})
    updir:=$(srcdir)/..
    updir1:=$(updir)/..
else
    updir:=${patsubst %:::,%,${patsubst %/:::,%,$(dir $(srcdir)):::}}
ifneq (,${findstring /,$(updir)})
    updir1:=${patsubst %:::,%,${patsubst %/:::,%,$(dir $(updir)):::}}
else
    updir1:=$(updir)/..
endif
endif

pwd:=${shell pwd}
ifneq (,${filter-out /%,$(pwd)})
    bupdir:=..
    bupdir1:=../..
    bupdir2:=../../..
else
    bupdir:=${patsubst %:::,%,${patsubst %/:::,%,$(dir $(pwd)):::}}
ifneq (,${findstring /,$(bupdir)})
    bupdir1:=${patsubst %:::,%,${patsubst %/:::,%,$(dir $(bupdir)):::}}
else
    bupdir1:=$(bupdir)/..
endif
ifneq (,${findstring /,$(bupdir1)})
    bupdir2:=${patsubst %:::,%,${patsubst %/:::,%,$(dir $(bupdir1)):::}}
else
    bupdir2:=$(bupdir1)/..
endif
endif

w32api_source:=$(updir)/w32api
w32api_build:=$(bupdir)/w32api
w32api_include:=$(w32api_source)/include
w32api_lib:=$(w32api_build)/lib
newlib_source:=$(updir1)/newlib
newlib_build:=$(bupdir1)/newlib
cygwin_build:=$(bupdir)/cygwin
cygwin_source:=$(updir)/cygwin
mingw_build:=$(bupdir)/mingw
mingw_source:=$(updir)/mingw
utils_build:=$(bupdir)/utils
utils_source:=$(updir)/utils

INCLUDES:=-I. -I$(cygwin_source)/include -I$(cygwin_source) -I$(newlib_source)/libc/sys/cygwin -I$(newlib_source)/libc/include -I$(w32api_include)
ifdef CONFIG_DIR
INCLUDES+=-I$(CONFIG_DIR)
endif

MINGW_INCLUDES:=-I$(updir)/mingw/include $(INCLUDES)

GCC_DEFAULT_OPTIONS:=$(CFLAGS_COMMON) $(CFLAGS_CONFIG) $(INCLUDES)

# Link in libc and libm from newlib

LIBC:=$(newlib_build)/libc/libc.a
LIBM:=$(newlib_build)/libm/libm.a
CRT0:=$(newlib_build)/libc/crt0.o

ALL_CFLAGS:=$(DEFS) $(MALLOC_DEBUG) $(CFLAGS) $(GCC_DEFAULT_OPTIONS)
ALL_CXXFLAGS:=$(DEFS) $(MALLOC_DEBUG) $(CXXFLAGS) $(GCC_DEFAULT_OPTIONS)

ifndef PREPROCESS
c=-c
o=.o
else
c=-E
o=.E
endif

LIBGCC:=${subst \,/,${shell $(CC_FOR_TARGET) -print-libgcc-file-name}}
GCC_INCLUDE:=${dir $(LIBGCC)}/include

COMPILE_CXX:=$(CC) $c -nostdinc++ $(ALL_CXXFLAGS) -I$(GCC_INCLUDE) \
	     -fno-rtti -fno-exceptions
COMPILE_CC:=$(CC) $c -nostdinc $(ALL_CFLAGS) -I$(GCC_INCLUDE)

vpath %.a	$(cygwin_build):$(w32api_lib):$(newlib_build)/libc:$(newlib_build)/libm

MAKEOVERRIDES_WORKAROUND=${wordlist 2,1,a b c}

ifneq ($(MAKEOVERRIDES_WORKAROUND),)
    override MAKE:=$(MAKE) $(MAKEOVERRIDES)
    MAKEOVERRIDES:=
    export MAKEOVERRIDES
endif

.PRECIOUS: %.o

%.o: %.cc
ifdef VERBOSE
	$(COMPILE_CXX) -o $(@D)/$(*F)$o $<
else
	@echo $(CC) $c $(CXXFLAGS) ... $(*F).cc
	@$(COMPILE_CXX) -o $(@D)/$(*F)$o $<
endif

%.o: %.c
ifdef VERBOSE
	$(COMPILE_CC) -o $(@D)/$(*F)$o $<
else
	@echo $(CC) $c $(CFLAGS) ... $(*F).c
	@$(COMPILE_CC) -o $(@D)/$(*F)$o $<
endif

$(bupdir1)/libiberty/%.o: $(updir1)/libiberty/%.c
	@$(MAKE) -C $(@D) $(@F)

$(w32api_lib)/%.a: $(w32api_lib)/Makefile
	@$(MAKE) --no-print-dir -C $(@D) $(@F)

all:

# For auto-rebuilding the Makefile

.PRECIOUS: Makefile

Makefile: Makefile.in $(srcdir)/configure.in config.status
	$(SHELL) config.status

config.status: configure
	$(SHELL) config.status --recheck