]>
Commit | Line | Data |
---|---|---|
1fd5e000 | 1 | # Makefile for Cygwin utilities |
4d7c0b51 | 2 | # Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, |
be822de2 | 3 | # 2005, 2006, 2007, 2008, 2009, 2010 Red Hat, Inc. |
1fd5e000 CF |
4 | |
5 | # This file is part of Cygwin. | |
6 | ||
7 | # This software is a copyrighted work licensed under the terms of the | |
8 | # Cygwin license. Please consult the file "CYGWIN_LICENSE" for | |
9 | # details. | |
10 | ||
11 | SHELL:=@SHELL@ | |
12 | ||
13 | srcdir:=@srcdir@ | |
14 | VPATH:=@srcdir@ | |
15 | prefix:=@prefix@ | |
16 | exec_prefix:=@exec_prefix@ | |
17 | ||
18 | bindir:=@bindir@ | |
1fd5e000 CF |
19 | program_transform_name:=@program_transform_name@ |
20 | ||
9ddd929f CF |
21 | override INSTALL:=@INSTALL@ |
22 | override INSTALL_PROGRAM:=@INSTALL_PROGRAM@ | |
23 | override INSTALL_DATA:=@INSTALL_DATA@ | |
1fd5e000 CF |
24 | |
25 | EXEEXT:=@EXEEXT@ | |
26 | EXEEXT_FOR_BUILD:=@EXEEXT_FOR_BUILD@ | |
27 | ||
28 | CC:=@CC@ | |
29 | CC_FOR_TARGET:=$(CC) | |
92311ab5 | 30 | CXX:=@CXX@ |
ce475802 | 31 | CXX_FOR_TARGET:=$(CXX) |
1fd5e000 CF |
32 | |
33 | CFLAGS:=@CFLAGS@ | |
2c2473bc | 34 | CXXFLAGS:=@CXXFLAGS@ |
67763c0c | 35 | override CXXFLAGS+=-fno-exceptions -fno-rtti -DHAVE_DECL_GETOPT=0 |
1fd5e000 CF |
36 | |
37 | include $(srcdir)/../Makefile.common | |
38 | ||
1fd5e000 CF |
39 | .SUFFIXES: |
40 | .NOEXPORT: | |
68d2dd03 BD |
41 | .PHONY: all install clean realclean warn_dumper warn_cygcheck_zlib |
42 | ||
43 | ALL_LDLIBS := -lnetapi32 -ladvapi32 | |
b2e53678 | 44 | ALL_LDFLAGS := -static-libgcc -Wl,--enable-auto-import -B$(newlib_build)/libc -B$(w32api_lib) $(LDFLAGS) $(ALL_LDLIBS) |
68d2dd03 BD |
45 | ALL_DEP_LDLIBS := $(cygwin_build)/libcygwin.a ${patsubst -l%,\ |
46 | $(w32api_lib)/lib%.a,$(ALL_LDLIBS) -lkernel32 -luser32} | |
47 | ||
48 | MINGW_LIB := $(mingw_build)/libmingw32.a | |
49 | MINGW_LDLIBS := $(ALL_LDLIBS) $(MINGW_LIB) | |
50 | MINGW_DEP_LDLIBS := $(ALL_DEP_LDLIBS) $(MINGW_LIB) | |
fd49ac27 | 51 | MINGW_CXX := ${srcdir}/mingw ${CXX} -I${updir} |
68d2dd03 BD |
52 | |
53 | # List all binaries to be linked in Cygwin mode. Each binary on this list | |
54 | # must have a corresponding .o of the same name. | |
c769bdf5 | 55 | CYGWIN_BINS := ${addsuffix .exe,cygpath getconf getfacl ldd locale kill mkgroup \ |
1b79b381 | 56 | mkpasswd mount passwd ps regtool setfacl setmetamode ssp tzset umount} |
68d2dd03 BD |
57 | |
58 | # List all binaries to be linked in MinGW mode. Each binary on this list | |
59 | # must have a corresponding .o of the same name. | |
cea37699 | 60 | MINGW_BINS := ${addsuffix .exe,cygcheck cygwin-console-helper ldh strace} |
68d2dd03 BD |
61 | |
62 | # List all objects to be compiled in MinGW mode. Any object not on this | |
63 | # list will will be compiled in Cygwin mode implicitly, so there is no | |
64 | # need for a CYGWIN_OBJS. | |
2e13058e | 65 | MINGW_OBJS := bloda.o cygcheck.o dump_setup.o ldh.o path.o strace.o |
68d2dd03 BD |
66 | |
67 | # If a binary should link in any objects besides the .o with the same | |
68 | # name as the binary, then list those here. | |
69 | strace.exe: path.o | |
70 | cygcheck.exe: bloda.o path.o dump_setup.o | |
71 | ||
1e497ebd CV |
72 | path-mount.o: path.cc |
73 | $(CXX) -c $(CXXFLAGS) -DFSTAB_ONLY -I$(updir) $< -o $@ | |
74 | mount.exe: path-mount.o | |
75 | ||
68d2dd03 | 76 | # Provide any necessary per-target variable overrides. |
e3e942ac | 77 | cygcheck.exe: MINGW_LDFLAGS += -lntdll |
71148bfc | 78 | cygpath.exe: ALL_LDFLAGS += -lcygwin -luserenv -lntdll |
73f2ecd1 | 79 | cygpath.exe: CXXFLAGS += -fno-threadsafe-statics |
185ad82d | 80 | ps.exe: ALL_LDFLAGS += -lcygwin -lpsapi -lntdll |
02a7f96e | 81 | strace.exe: MINGW_LDFLAGS += -lntdll |
68d2dd03 | 82 | |
086dc27f CF |
83 | ldd.exe: ALL_LDFLAGS += -lpsapi |
84 | ||
2e13058e CF |
85 | ldh.exe: MINGW_LDLIBS := |
86 | ldh.exe: MINGW_LDFLAGS := -nostdlib -lkernel32 | |
87 | ||
68d2dd03 BD |
88 | # Check for dumper's requirements and enable it if found. |
89 | LIBICONV := @libiconv@ | |
90 | libbfd := ${shell $(CC) -B$(bupdir2)/bfd/ --print-file-name=libbfd.a} | |
91 | libintl := ${shell $(CC) -B$(bupdir2)/intl/ --print-file-name=libintl.a} | |
8f8977bb CF |
92 | bfdlink := $(shell ${CC} -xc /dev/null -o /dev/null -c -B${bupdir2}/bfd/ -include bfd.h 2>&1) |
93 | build_dumper := ${shell test -r $(libbfd) -a -r $(libintl) -a -n "$(LIBICONV)" -a -z "${bfdlink}" && echo 1} | |
68d2dd03 BD |
94 | ifdef build_dumper |
95 | CYGWIN_BINS += dumper.exe | |
96 | dumper.o module_info.o parse_pe.o: CXXFLAGS += -I$(bupdir2)/bfd -I$(updir1)/include | |
97 | dumper.o parse_pe.o: dumper.h | |
98 | dumper.exe: module_info.o parse_pe.o | |
228f0b11 | 99 | dumper.exe: ALL_LDFLAGS += ${libbfd} ${libintl} -L$(bupdir1)/libiberty $(LIBICONV) -liberty -lz |
2fac517d | 100 | else |
68d2dd03 | 101 | all: warn_dumper |
2fac517d CF |
102 | endif |
103 | ||
68d2dd03 | 104 | # Check for availability of a MinGW libz and enable for cygcheck. |
fd49ac27 | 105 | libz:=${shell x=$$(${MINGW_CXX} --print-file-name=libz.a); cd $$(dirname $$x); dir=$$(pwd); case "$$dir" in *mingw*) echo $$dir/libz.a ;; esac} |
68d2dd03 BD |
106 | ifdef libz |
107 | zlib_h := -include ${patsubst %/lib/mingw/libz.a,%/include/zlib.h,${patsubst %/lib/libz.a,%/include/zlib.h,$(libz)}} | |
108 | zconf_h := ${patsubst %/zlib.h,%/zconf.h,$(zlib_h)} | |
109 | dump_setup.o: MINGW_CXXFLAGS += $(zconf_h) $(zlib_h) | |
e3e942ac | 110 | cygcheck.exe: MINGW_LDFLAGS += $(libz) |
ce475802 | 111 | else |
68d2dd03 | 112 | all: warn_cygcheck_zlib |
ce475802 CF |
113 | endif |
114 | ||
68d2dd03 | 115 | all: Makefile $(CYGWIN_BINS) $(MINGW_BINS) |
0ad10c0f | 116 | |
59fb00ae BD |
117 | # test harness support (note: the "MINGW_BINS +=" should come after the |
118 | # "all:" above so that the testsuite is not run for "make" but only | |
119 | # "make check".) | |
120 | MINGW_BINS += testsuite.exe | |
121 | MINGW_OBJS += path-testsuite.o testsuite.o | |
122 | testsuite.exe: path-testsuite.o | |
123 | path-testsuite.cc: path.cc ; @test -L $@ || ln -sf ${filter %.cc,$^} $@ | |
124 | path-testsuite.o: MINGW_CXXFLAGS += -DTESTSUITE | |
125 | # this is necessary because this .c lives in the build dir instead of src | |
126 | path-testsuite.o: MINGW_CXX := ${patsubst -I.,-I$(utils_source),$(MINGW_CXX)} | |
127 | path-testsuite.cc path.cc testsuite.cc: testsuite.h | |
128 | check: testsuite.exe ; $(<D)/$(<F) | |
129 | ||
130 | # the rest of this file contains generic rules | |
131 | ||
68d2dd03 BD |
132 | # how to compile a MinGW object |
133 | $(MINGW_OBJS): %.o: %.cc | |
2fac517d | 134 | ifdef VERBOSE |
b07b167e | 135 | $(MINGW_CXX) $c -o $(@D)/$(basename $@)$o $(MINGW_CXXFLAGS) $< |
2fac517d | 136 | else |
68d2dd03 BD |
137 | @echo $(MINGW_CXX) $c $(MINGW_CXXFLAGS) ... $(*F).cc;\ |
138 | $(MINGW_CXX) $c -o $(@D)/$(basename $@)$o $(MINGW_CXXFLAGS) $< | |
d0d51791 CF |
139 | endif |
140 | ||
68d2dd03 BD |
141 | # how to link a MinGW binary |
142 | $(MINGW_BINS): %.exe: %.o | |
64b94981 | 143 | ifdef VERBOSE |
fd49ac27 | 144 | $(MINGW_CXX) $(MINGW_CXXFLAGS) -o $@ ${filter %.o,$^} -B$(mingw_build)/ $(MINGW_LDFLAGS) |
64b94981 | 145 | else |
fd49ac27 CF |
146 | @echo $(MINGW_CXX) -o $@ ${filter %.o,$^} ${filter-out -B%, $(MINGW_CXXFLAGS) $(MINGW_LDFLAGS)};\ |
147 | $(MINGW_CXX) $(MINGW_CXXFLAGS) -o $@ ${filter %.o,$^} -B$(mingw_build)/ $(MINGW_LDFLAGS) | |
64b94981 DK |
148 | endif |
149 | ||
68d2dd03 | 150 | # how to link a Cygwin binary |
9401a0f8 | 151 | $(CYGWIN_BINS): %.exe: %.o |
ad466e2f | 152 | ifdef VERBOSE |
68d2dd03 | 153 | $(CXX) -o $@ ${filter %.o,$^} -B$(cygwin_build)/ $(ALL_LDFLAGS) |
ad466e2f | 154 | else |
68d2dd03 BD |
155 | @echo $(CXX) -o $@ ${filter %.o,$^} ... ${filter-out -B%, $(ALL_LDFLAGS)};\ |
156 | $(CXX) -o $@ ${filter %.o,$^} -B$(cygwin_build)/ $(ALL_LDFLAGS) | |
ad466e2f CF |
157 | endif |
158 | ||
68d2dd03 | 159 | # note: how to compile a Cygwin object is covered by the pattern rule in Makefile.common |
ad466e2f | 160 | |
68d2dd03 BD |
161 | # these dependencies ensure that the required in-tree libs are built first |
162 | $(MINGW_BINS): $(MINGW_DEP_LDLIBS) | |
163 | $(CYGWIN_BINS): $(ALL_DEP_LDLIBS) | |
c49fa762 | 164 | |
1fd5e000 | 165 | clean: |
59fb00ae | 166 | rm -f *.o $(CYGWIN_BINS) $(MINGW_BINS) path-testsuite.cc testsuite.exe |
1fd5e000 CF |
167 | |
168 | realclean: clean | |
68d2dd03 | 169 | rm -f Makefile config.cache |
1fd5e000 CF |
170 | |
171 | install: all | |
99fe2b78 | 172 | $(SHELL) $(updir1)/mkinstalldirs $(DESTDIR)$(bindir) |
92108f4e | 173 | for i in $(CYGWIN_BINS) ${filter-out testsuite.exe,$(MINGW_BINS)} ; do \ |
1fd5e000 | 174 | n=`echo $$i | sed '$(program_transform_name)'`; \ |
99fe2b78 | 175 | $(INSTALL_PROGRAM) $$i $(DESTDIR)$(bindir)/$$n; \ |
1fd5e000 CF |
176 | done |
177 | ||
178 | $(cygwin_build)/libcygwin.a: $(cygwin_build)/Makefile | |
179 | @$(MAKE) -C $(@D) $(@F) | |
180 | ||
68d2dd03 | 181 | $(MINGW_LIB): $(mingw_build)/Makefile |
1fd5e000 CF |
182 | @$(MAKE) -C $(@D) $(@F) |
183 | ||
0715614b | 184 | warn_dumper: |
8f8977bb CF |
185 | @echo '*** Not building dumper.exe since some required libraries or' |
186 | @echo '*** or headers are missing. Potential candidates are:' | |
187 | @echo '*** bfd.h, libbfd.a, libiconv.a, or libintl.a' | |
10e1fce6 | 188 | @echo '*** If you need this program, check out the naked-bfd and naked-intl' |
e3e942ac | 189 | @echo '*** sources from sourceware.org. Then, configure and build these' |
10e1fce6 | 190 | @echo '*** libraries. Otherwise, you can safely ignore this warning.' |
0715614b | 191 | |
68d2dd03 BD |
192 | warn_cygcheck_zlib: |
193 | @echo '*** Building cygcheck without package content checking due to missing mingw libz.a.' |