aboutsummaryrefslogtreecommitdiff
path: root/winsup/utils/Makefile.in
blob: 7682533a47885301225f49e7d6fc6de22e0363ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# Makefile for Cygwin utilities
# Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
# 2007, 2008, 2009, 2010, 2011, 2012 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.

srcdir:=@srcdir@
target_builddir:=@target_builddir@
winsup_srcdir:=@winsup_srcdir@
configure_args=@configure_args@

export CC:=@CC@
export CXX:=@CXX@

CFLAGS:=@CFLAGS@
CXXFLAGS:=@CXXFLAGS@
override CXXFLAGS+=-fno-exceptions -fno-rtti

include ${srcdir}/../Makefile.common

cygwin_build:=${target_builddir}/winsup/cygwin

cygwin_headers:=@cygwin_headers@

# environment variables used by ccwrap
export CCWRAP_HEADERS:=. ${srcdir} $(call justdir,${cygwin_headers})
export CCWRAP_SYSTEM_HEADERS:=${cygwin_headers} @newlib_headers@
export CCWRAP_DIRAFTER_HEADERS:=@windows_headers@

WINDOWS_LIBDIR:=@windows_libdir@

prefix:=@prefix@
exec_prefix:=@exec_prefix@

bindir:=@bindir@
program_transform_name:=@program_transform_name@

override INSTALL:=@INSTALL@
override INSTALL_PROGRAM:=@INSTALL_PROGRAM@
override INSTALL_DATA:=@INSTALL_DATA@

EXEEXT:=@EXEEXT@
EXEEXT_FOR_BUILD:=@EXEEXT_FOR_BUILD@

.PHONY: all install clean realclean warn_dumper warn_cygcheck_zlib

LDLIBS := -lnetapi32 -ladvapi32 -lkernel32 -luser32
CYGWIN_LDFLAGS := -static -Wl,--enable-auto-import -L${WINDOWS_LIBDIR} $(LDLIBS)
DEP_LDLIBS := $(cygwin_build)/libcygwin.a

MINGW_CXX      := @MINGW_CXX@

# List all binaries to be linked in Cygwin mode.  Each binary on this list
# must have a corresponding .o of the same name.
CYGWIN_BINS := ${addsuffix .exe,cygpath getconf getfacl ldd locale kill mkgroup \
        mkpasswd mount passwd pldd ps regtool setfacl setmetamode ssp tzset umount}

# List all binaries to be linked in MinGW mode.  Each binary on this list
# must have a corresponding .o of the same name.
MINGW_BINS := ${addsuffix .exe,cygcheck cygwin-console-helper ldh strace}

# List all objects to be compiled in MinGW mode.  Any object not on this
# list will will be compiled in Cygwin mode implicitly, so there is no
# need for a CYGWIN_OBJS.
MINGW_OBJS := bloda.o cygcheck.o dump_setup.o ldh.o path.o strace.o
MINGW_LDFLAGS:=-static

CYGCHECK_OBJS:=cygcheck.o bloda.o path.o dump_setup.o
ZLIB:=-lz

.PHONY: all
all:

# If a binary should link in any objects besides the .o with the same
# name as the binary, then list those here.
strace.exe: path.o
cygcheck.exe: cygcheck.o bloda.o path.o dump_setup.o

path-mount.o: path.cc
	${COMPILE.cc} -c -DFSTAB_ONLY -o $@ $<
mount.exe: path-mount.o

# Provide any necessary per-target variable overrides.

cygcheck.exe: MINGW_LDFLAGS += ${ZLIB} -lwininet -lpsapi -lntdll
cygcheck.exe: ${CYGCHECK_OBJS}

cygpath.o: CXXFLAGS += -fno-threadsafe-statics
cygpath.exe: CYGWIN_LDFLAGS += -lcygwin -luserenv -lntdll
ps.exe: CYGWIN_LDFLAGS += -lcygwin -lpsapi -lntdll
strace.exe: MINGW_LDFLAGS += -lntdll

ldd.exe:CYGWIN_LDFLAGS += -lpsapi
pldd.exe: CYGWIN_LDFLAGS += -lpsapi

ldh.exe: MINGW_LDFLAGS += -nostdlib -lkernel32

# Check for dumper's requirements and enable it if found.
libbfd   := $(call libname,libbfd.a)
build_dumper := $(shell test -r "$(libbfd)" && echo 1)

ifdef build_dumper
CYGWIN_BINS += dumper.exe
dumper.o module_info.o parse_pe.o: CXXFLAGS += -I$(top_srcdir)/include
dumper.o parse_pe.o: dumper.h
dumper.exe: module_info.o parse_pe.o
dumper.exe: CYGWIN_LDFLAGS += -lpsapi -lbfd -lintl -liconv -liberty ${ZLIB}
else
all: warn_dumper
endif

all: Makefile $(CYGWIN_BINS) $(MINGW_BINS)

# test harness support (note: the "MINGW_BINS +=" should come after the
# "all:" above so that the testsuite is not run for "make" but only
# "make check".)
MINGW_BINS += testsuite.exe
MINGW_OBJS += path-testsuite.o testsuite.o
testsuite.exe: path-testsuite.o
path-testsuite.cc: path.cc ; @test -L $@ || ln -sf ${filter %.cc,$^} $@
path-testsuite.o: MINGW_CXXFLAGS += -DTESTSUITE
# this is necessary because this .c lives in the build dir instead of src
path-testsuite.o: MINGW_CXX := ${patsubst -I.,-I$(utils_source),$(MINGW_CXX)}
path-testsuite.cc path.cc testsuite.cc: testsuite.h
check: testsuite.exe ; $(<D)/$(<F)

# the rest of this file contains generic rules

# how to compile a MinGW object
${MINGW_OBJS}: override CXX:=${MINGW_CXX}
${MINGW_OBJS}: CCWRAP_HEADERS:=${srcdir}
${MINGW_OBJS}: CCWRAP_SYSTEM_HEADERS:=
# ${MINGW_OBJS}: CCWRAP_DIRAFTER_HEADERS:=
$(MINGW_OBJS): %.o: %.cc
	c++wrap -c -o $@ ${CXXFLAGS} $(MINGW_CXXFLAGS) $<

# how to link a MinGW binary
$(MINGW_BINS): %.exe: %.o
	$(MINGW_CXX) $(MINGW_CXXFLAGS) -o $@ ${filter %.o,$^} $(MINGW_LDFLAGS)

# how to link a Cygwin binary
$(CYGWIN_BINS): %.exe: %.o
	${CXX} -o $@ $(filter %.o,$^) -B${cygwin_build}/ ${LDFLAGS} ${CYGWIN_LDFLAGS}

# note: how to compile a Cygwin object is covered by the pattern rule in Makefile.common

# these dependencies ensure that the required in-tree libs are built first
$(MINGW_BINS): $(DEP_LDLIBS)
$(CYGWIN_BINS): $(DEP_LDLIBS)

cygcheck.o cygpath.o module_info.o path.o ps.o regtool.o strace.o: loadlib.h

.PHONY: clean
clean:
	rm -f *.o $(CYGWIN_BINS) $(MINGW_BINS) path-testsuite.cc testsuite.exe

.PHONY: realclean
realclean: clean
	rm -f Makefile config.cache

.PHONY: install
install: all
	/bin/mkdir -p ${DESTDIR}${bindir}
	for i in $(CYGWIN_BINS) ${filter-out testsuite.exe,$(MINGW_BINS)} ; do \
	  n=`echo $$i | sed '$(program_transform_name)'`; \
	  $(INSTALL_PROGRAM) $$i $(DESTDIR)$(bindir)/$$n; \
	done

$(cygwin_build)/libcygwin.a: $(cygwin_build)/Makefile
	@$(MAKE) -C $(@D) $(@F)

.PHONY: warn_dumper
warn_dumper:
	@echo '*** Not building dumper.exe since some required libraries or'
	@echo '*** or headers are missing.  Potential candidates are:'
	@echo '***   bfd.h, libbfd.a, libiconv.a, or libintl.a'
	@echo '*** If you need this program, check out the naked-bfd and naked-intl'
	@echo '*** sources from sourceware.org.  Then, configure and build these'
	@echo '*** libraries.  Otherwise, you can safely ignore this warning.'

Makefile: Makefile.in config.status
	/bin/sh ./config.status