# Makefile for Cygwin utilities # Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008 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. SHELL:=@SHELL@ srcdir:=@srcdir@ VPATH:=@srcdir@ 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@ CC:=@CC@ CC_FOR_TARGET:=$(CC) CXX:=@CXX@ CXX_FOR_TARGET:=$(CXX) CFLAGS:=@CFLAGS@ CXXFLAGS:=@CXXFLAGS@ override CXXFLAGS+=-fno-exceptions -fno-rtti -DHAVE_DECL_GETOPT=0 include $(srcdir)/../Makefile.common .SUFFIXES: .NOEXPORT: .PHONY: all install clean realclean warn_dumper warn_cygcheck_zlib ALL_LDLIBS := -lnetapi32 -ladvapi32 ALL_LDFLAGS := -B$(newlib_build)/libc -B$(w32api_lib) $(LDFLAGS) $(ALL_LDLIBS) ALL_DEP_LDLIBS := $(cygwin_build)/libcygwin.a ${patsubst -l%,\ $(w32api_lib)/lib%.a,$(ALL_LDLIBS) -lkernel32 -luser32} MINGW_LIB := $(mingw_build)/libmingw32.a MINGW_LDLIBS := $(ALL_LDLIBS) $(MINGW_LIB) MINGW_DEP_LDLIBS := $(ALL_DEP_LDLIBS) $(MINGW_LIB) MINGW_CXX := ${patsubst %/cygwin/include,%/mingw/include,\ ${filter-out -I$(newlib_source)/%,$(COMPILE_CXX)}} -I$(updir) # 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 getfacl ipcrm ipcs kill mkgroup \ mkpasswd mount passwd ps regtool setfacl setmetamode ssp 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,strace cygcheck} # 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 path.o strace.o # 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: bloda.o path.o dump_setup.o # Provide any necessary per-target variable overrides. cygpath.exe: ALL_LDFLAGS += -lntdll # Check for dumper's requirements and enable it if found. LIBICONV := @libiconv@ libbfd := ${shell $(CC) -B$(bupdir2)/bfd/ --print-file-name=libbfd.a} libintl := ${shell $(CC) -B$(bupdir2)/intl/ --print-file-name=libintl.a} build_dumper := ${shell test -r $(libbfd) -a -r $(libintl) -a -n "$(LIBICONV)" && echo 1} ifdef build_dumper CYGWIN_BINS += dumper.exe dumper.o module_info.o parse_pe.o: CXXFLAGS += -I$(bupdir2)/bfd -I$(updir1)/include dumper.o parse_pe.o: dumper.h dumper.exe: module_info.o parse_pe.o dumper.exe: ALL_LDFLAGS += ${libbfd} ${libintl} -L$(bupdir1)/libiberty $(LIBICONV) -liberty else all: warn_dumper endif # Check for availability of a MinGW libz and enable for cygcheck. libz:=${shell x=$$($(CC) -mno-cygwin --print-file-name=libz.a); cd $$(dirname $$x); dir=$$(pwd); case "$$dir" in *mingw*) echo $$dir/libz.a ;; esac} ifdef libz zlib_h := -include ${patsubst %/lib/mingw/libz.a,%/include/zlib.h,${patsubst %/lib/libz.a,%/include/zlib.h,$(libz)}} zconf_h := ${patsubst %/zlib.h,%/zconf.h,$(zlib_h)} dump_setup.o: MINGW_CXXFLAGS += $(zconf_h) $(zlib_h) cygcheck.exe: MINGW_LDFLAGS += $(libz) else all: warn_cygcheck_zlib endif # the rest of this file contains generic rules all: Makefile $(CYGWIN_BINS) $(MINGW_BINS) # how to compile a MinGW object $(MINGW_OBJS): %.o: %.cc ifdef VERBOSE $(MINGW_CXX) $c -o $(@D)/$(basename $@)$o $(MINGW_CXXFLAGS) $< else @echo $(MINGW_CXX) $c $(MINGW_CXXFLAGS) ... $(*F).cc;\ $(MINGW_CXX) $c -o $(@D)/$(basename $@)$o $(MINGW_CXXFLAGS) $< endif # how to link a MinGW binary $(MINGW_BINS): %.exe: %.o ifdef VERBOSE $(CXX) $(MINGW_CXXFLAGS) -o $@ ${filter %.o,$^} -B$(mingw_build)/ $(MINGW_LDFLAGS) else @echo $(CXX) -o $@ ${filter %.o,$^} ${filter-out -B%, $(MINGW_CXXFLAGS) $(MINGW_LDFLAGS)};\ $(CXX) $(MINGW_CXXFLAGS) -o $@ ${filter %.o,$^} -B$(mingw_build)/ $(MINGW_LDFLAGS) endif # how to link a Cygwin binary $(CYGWIN_BINS): %.exe: %.o ifdef VERBOSE $(CXX) -o $@ ${filter %.o,$^} -B$(cygwin_build)/ $(ALL_LDFLAGS) else @echo $(CXX) -o $@ ${filter %.o,$^} ... ${filter-out -B%, $(ALL_LDFLAGS)};\ $(CXX) -o $@ ${filter %.o,$^} -B$(cygwin_build)/ $(ALL_LDFLAGS) endif # 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): $(MINGW_DEP_LDLIBS) $(CYGWIN_BINS): $(ALL_DEP_LDLIBS) clean: rm -f *.o $(CYGWIN_BINS) $(MINGW_BINS) realclean: clean rm -f Makefile config.cache install: all $(SHELL) $(updir1)/mkinstalldirs $(bindir) for i in $(CYGWIN_BINS) $(MINGW_BINS) ; do \ n=`echo $$i | sed '$(program_transform_name)'`; \ $(INSTALL_PROGRAM) $$i $(bindir)/$$n; \ done $(cygwin_build)/libcygwin.a: $(cygwin_build)/Makefile @$(MAKE) -C $(@D) $(@F) $(MINGW_LIB): $(mingw_build)/Makefile @$(MAKE) -C $(@D) $(@F) warn_dumper: @echo '*** Not building dumper.exe since some required libraries are' @echo '*** missing: libbfd.a and libintl.a.' @echo '*** If you need this program, check out the naked-bfd and naked-intl' @echo '*** sources from sources.redhat.com. Then, configure and build these' @echo '*** libraries. Otherwise, you can safely ignore this warning.' warn_cygcheck_zlib: @echo '*** Building cygcheck without package content checking due to missing mingw libz.a.'