40481dbabb
Using posix timers "timer_tracker" as base class for timerfd was flawed. Posix timers are not inherited by child processes and don't survive execve. The method used by posix timers didn't allow to share timers between processes. The timers were still per-process timers and worked entirely separate from each other. Reading from these timers via different descriptors was only synchronized within the same process. This does not reflect the timerfd semantics in Linux: The per-file timers can be dup'ed and survive fork and execve. They are still just descriptors pointing to the same timer object originally created by timerfd_create. Synchronization is performed between all descriptor instances of the same timer, system-wide. Thus, reimplement timerfd using a timer instance in shared memory, a kernel timer, and a handful of sync objects. Every process maintains a per-process timerfd struct on the cygheap maintaining a per-process thread. Every process sharing the same timerfd will run this thread checking the state of the timer, similar to the posix timer thread, just working on the shared objects and synchronizing its job with each other thread. Drop the timerfd implementation in the posix timer code and move the public API to fhandler_timerfd.c. Keep the ttstart timer_tracker anchor out of "NO_COPY" since the fixup_after_fork code should run to avoid memory leakage. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
801 lines
18 KiB
Makefile
801 lines
18 KiB
Makefile
# Makefile.in for Cygwin.
|
|
#
|
|
# 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.
|
|
# configure_input: @configure_input@
|
|
|
|
# This makefile requires GNU make.
|
|
|
|
srcdir:=@srcdir@
|
|
target_builddir:=@target_builddir@
|
|
winsup_srcdir:=@winsup_srcdir@
|
|
configure_args=@configure_args@
|
|
|
|
export CC:=@CC@
|
|
export CXX:=@CXX@
|
|
|
|
CFLAGS?=@CFLAGS@
|
|
CXXFLAGS?=@CXXFLAGS@
|
|
|
|
include ${srcdir}/../Makefile.common
|
|
|
|
# environment variables used by ccwrap
|
|
export CCWRAP_HEADERS:=. ${srcdir}
|
|
export CCWRAP_SYSTEM_HEADERS:=@cygwin_headers@ @newlib_headers@
|
|
export CCWRAP_DIRAFTER_HEADERS:=@windows_headers@
|
|
|
|
VPATH+=$(srcdir)/regex $(srcdir)/lib $(srcdir)/libc $(srcdir)/math
|
|
|
|
target_cpu:=@target_cpu@
|
|
target_alias:=@target_alias@
|
|
build_alias:=@build_alias@
|
|
host_alias:=@host_alias@
|
|
prefix:=@prefix@
|
|
|
|
program_transform_name:=@program_transform_name@
|
|
exec_prefix:=@exec_prefix@
|
|
bindir:=@bindir@
|
|
libdir:=@libdir@
|
|
mandir:=@mandir@
|
|
sysconfdir:=@sysconfdir@
|
|
datarootdir:=@datarootdir@
|
|
ifeq ($(target_alias),$(host_alias))
|
|
ifeq ($(build_alias),$(host_alias))
|
|
tooldir:=$(exec_prefix)
|
|
else
|
|
tooldir:=$(exec_prefix)/$(target_alias)
|
|
endif
|
|
else
|
|
tooldir:=$(exec_prefix)/$(target_alias)
|
|
endif
|
|
datadir:=@datadir@
|
|
infodir:=@infodir@
|
|
includedir:=@includedir@
|
|
|
|
override INSTALL:=@INSTALL@
|
|
override INSTALL_PROGRAM:=@INSTALL_PROGRAM@
|
|
override INSTALL_DATA:=@INSTALL_DATA@
|
|
|
|
WINDOWS_LIBDIR:=@windows_libdir@
|
|
|
|
cygserver_blddir:=${target_builddir}/winsup/cygserver
|
|
LIBSERVER:=${cygserver_blddir}/libcygserver.a
|
|
|
|
LIBC:=$(newlib_build)/libc/libc.a
|
|
LIBM:=$(newlib_build)/libm/libm.a
|
|
CRT0:=$(cygwin_build)/crt0.o
|
|
|
|
#
|
|
# --enable options from configure
|
|
#
|
|
MT_SAFE:=@MT_SAFE@
|
|
CCEXTRA=
|
|
COMMON_CFLAGS=-MMD ${$(*F)_CFLAGS} -Werror -fmerge-constants -ftracer $(CCEXTRA)
|
|
ifeq ($(target_cpu),x86_64)
|
|
COMMON_CFLAGS+=-mcmodel=small
|
|
endif
|
|
COMPILE.cc+=${COMMON_CFLAGS} -std=gnu++98
|
|
COMPILE.c+=${COMMON_CFLAGS}
|
|
|
|
AR:=@AR@
|
|
AR_FLAGS:=qv
|
|
RANLIB:=@RANLIB@
|
|
LD:=@LD@
|
|
DLLTOOL:=@DLLTOOL@
|
|
WINDRES:=@WINDRES@
|
|
AS:=@AS@
|
|
NM:=@NM@
|
|
OBJCOPY:=@OBJCOPY@
|
|
OBJDUMP:=@OBJDUMP@
|
|
STRIP:=@STRIP@
|
|
LDSCRIPT:=cygwin.sc
|
|
MKDIRP:=$(INSTALL) -m 755 -d
|
|
|
|
@SET_MAKE@
|
|
|
|
# Setup the testing framework, if you have one
|
|
EXPECT = `if [ -f $${rootme}/../../expect/expect$(EXEEXT) ] ; then \
|
|
echo $${rootme}/../../expect/expect$(EXEEXT) ; \
|
|
else echo expect ; fi`
|
|
|
|
RUNTEST = `if [ -f $${srcdir}/../dejagnu/runtest ] ; then \
|
|
echo $${srcdir}/../dejagnu/runtest ; \
|
|
else echo runtest; fi`
|
|
RUNTESTFLAGS =
|
|
|
|
# Parameters used in building the cygwin.dll.
|
|
# We build as cygwin0.dll and rename at install time to overcome
|
|
# native rebuilding issues (we don't want the build tools to see a partially
|
|
# built cygwin.dll and attempt to use it instead of the old one).
|
|
|
|
DLL_NAME:=@DLL_NAME@
|
|
TEST_DLL_NAME:=${patsubst %1.dll,%0.dll,@DLL_NAME@}
|
|
TEST_LIB_NAME:=libcygwin0.a
|
|
STATIC_LIB_NAME:=libcygwin_s.a
|
|
DIN_FILE=@DIN_FILE@ common.din
|
|
DEF_FILE:=cygwin.def
|
|
TLSOFFSETS_H:=@TLSOFFSETS_H@
|
|
DLL_ENTRY:=@DLL_ENTRY@
|
|
|
|
LIBGMON_A:=libgmon.a
|
|
CYGWIN_START:=crt0.o
|
|
GMON_START:=gcrt0.o
|
|
|
|
toolopts:=--cpu=${target_cpu} --ar=${AR} --as=${AS} --nm=${NM} --objcopy=${OBJCOPY}
|
|
speclib=\
|
|
${srcdir}/speclib ${toolopts} \
|
|
--exclude='cygwin' \
|
|
--exclude='(?i:dll)' \
|
|
--exclude='reloc' \
|
|
--exclude='^main$$' \
|
|
--exclude='^_main$$' \
|
|
$^
|
|
|
|
# Some things want these from libc, but they have their own static
|
|
# data which apps can get to, which is a pain in the dll, so we
|
|
# include them directly into the library.
|
|
|
|
LIBCOS:=${sort ${addsuffix .o,${basename ${notdir ${wildcard $(srcdir)/lib/*.c}}}} \
|
|
${addsuffix .o,${basename ${notdir ${wildcard $(srcdir)/lib/*.cc}}}}}
|
|
|
|
# Build all source files in the config directory
|
|
|
|
EXTRA_OFILES:=
|
|
|
|
MALLOC_OFILES:=malloc.o
|
|
|
|
DLL_IMPORTS:=${shell $(CC) -print-file-name=w32api/libkernel32.a} ${shell $(CC) -print-file-name=w32api/libntdll.a}
|
|
|
|
MT_SAFE_OBJECTS:=
|
|
#
|
|
MATH_OFILES:= \
|
|
acoshl.o \
|
|
acosl.o \
|
|
asinhl.o \
|
|
asinl.o \
|
|
atan2l.o \
|
|
atanhl.o \
|
|
atanl.o \
|
|
cabsl.o \
|
|
cacosl.o \
|
|
cargl.o \
|
|
casinl.o \
|
|
catanl.o \
|
|
cbrtl.o \
|
|
ccosl.o \
|
|
ceill.o \
|
|
cephes_emath.o \
|
|
cexpl.o \
|
|
cimagl.o \
|
|
clog10l.o \
|
|
clogl.o \
|
|
conjl.o \
|
|
copysignl.o \
|
|
coshl.o \
|
|
cosl.o \
|
|
cosl_internal.o \
|
|
cossin.o \
|
|
cpowl.o \
|
|
cprojl.o \
|
|
creall.o \
|
|
csinl.o \
|
|
csqrtl.o \
|
|
ctanl.o \
|
|
erfl.o \
|
|
exp10l.o \
|
|
exp2l.o \
|
|
expl.o \
|
|
expm1l.o \
|
|
fabsl.o \
|
|
fdiml.o \
|
|
finite.o \
|
|
floorl.o \
|
|
fmal.o \
|
|
fmaxl.o \
|
|
fminl.o \
|
|
fmodl.o \
|
|
frexpl.o \
|
|
ilogbl.o \
|
|
internal_logl.o \
|
|
isinf.o \
|
|
isnan.o \
|
|
ldexpl.o \
|
|
lgammal.o \
|
|
llrint.o \
|
|
llrintf.o \
|
|
llrintl.o \
|
|
llroundl.o \
|
|
log10l.o \
|
|
log1pl.o \
|
|
log2l.o \
|
|
logbl.o \
|
|
logl.o \
|
|
lrint.o \
|
|
lrintf.o \
|
|
lrintl.o \
|
|
lroundl.o \
|
|
modfl.o \
|
|
nearbyint.o \
|
|
nearbyintf.o \
|
|
nearbyintl.o \
|
|
nextafterl.o \
|
|
nexttoward.o \
|
|
nexttowardf.o \
|
|
pow10l.o \
|
|
powil.o \
|
|
powl.o \
|
|
remainder.o \
|
|
remainderf.o \
|
|
remainderl.o \
|
|
remquol.o \
|
|
rint.o \
|
|
rintf.o \
|
|
rintl.o \
|
|
roundl.o \
|
|
scalbl.o \
|
|
scalbnl.o \
|
|
sinhl.o \
|
|
sinl.o \
|
|
sinl_internal.o \
|
|
sqrtl.o \
|
|
tanhl.o \
|
|
tanl.o \
|
|
tgammal.o \
|
|
truncl.o
|
|
|
|
DLL_OFILES:= \
|
|
advapi32.o \
|
|
aio.o \
|
|
arc4random_stir.o \
|
|
assert.o \
|
|
autoload.o \
|
|
base64.o \
|
|
bsdlib.o \
|
|
clock.o \
|
|
ctype.o \
|
|
cxx.o \
|
|
cygheap.o \
|
|
cygthread.o \
|
|
cygtls.o \
|
|
cygwait.o \
|
|
cygxdr.o \
|
|
dcrt0.o \
|
|
debug.o \
|
|
devices.o \
|
|
dir.o \
|
|
dlfcn.o \
|
|
dll_init.o \
|
|
dtable.o \
|
|
environ.o \
|
|
errno.o \
|
|
exceptions.o \
|
|
exec.o \
|
|
external.o \
|
|
fcntl.o \
|
|
fenv.o \
|
|
fhandler.o \
|
|
fhandler_clipboard.o \
|
|
fhandler_console.o \
|
|
fhandler_cygdrive.o \
|
|
fhandler_dev.o \
|
|
fhandler_disk_file.o \
|
|
fhandler_dsp.o \
|
|
fhandler_fifo.o \
|
|
fhandler_floppy.o \
|
|
fhandler_netdrive.o \
|
|
fhandler_nodevice.o \
|
|
fhandler_pipe.o \
|
|
fhandler_proc.o \
|
|
fhandler_process.o \
|
|
fhandler_process_fd.o \
|
|
fhandler_procnet.o \
|
|
fhandler_procsys.o \
|
|
fhandler_procsysvipc.o \
|
|
fhandler_random.o \
|
|
fhandler_raw.o \
|
|
fhandler_registry.o \
|
|
fhandler_serial.o \
|
|
fhandler_signalfd.o \
|
|
fhandler_socket.o \
|
|
fhandler_socket_inet.o \
|
|
fhandler_socket_local.o \
|
|
fhandler_socket_unix.o \
|
|
fhandler_tape.o \
|
|
fhandler_termios.o \
|
|
fhandler_timerfd.o \
|
|
fhandler_tty.o \
|
|
fhandler_virtual.o \
|
|
fhandler_windows.o \
|
|
fhandler_zero.o \
|
|
flock.o \
|
|
fnmatch.o \
|
|
fork.o \
|
|
fts.o \
|
|
ftw.o \
|
|
getentropy.o \
|
|
getopt.o \
|
|
glob.o \
|
|
glob_pattern_p.o \
|
|
globals.o \
|
|
grp.o \
|
|
heap.o \
|
|
hookapi.o \
|
|
inet_addr.o \
|
|
inet_network.o \
|
|
init.o \
|
|
ioctl.o \
|
|
ipc.o \
|
|
kernel32.o \
|
|
ldap.o \
|
|
libstdcxx_wrapper.o \
|
|
loadavg.o \
|
|
localtime.o \
|
|
lsearch.o \
|
|
malloc_wrapper.o \
|
|
minires-os-if.o \
|
|
minires.o \
|
|
miscfuncs.o \
|
|
mktemp.o \
|
|
mmap.o \
|
|
msg.o \
|
|
msgcat.o \
|
|
mount.o \
|
|
net.o \
|
|
netdb.o \
|
|
nfs.o \
|
|
nftw.o \
|
|
nlsfuncs.o \
|
|
ntea.o \
|
|
passwd.o \
|
|
path.o \
|
|
pinfo.o \
|
|
poll.o \
|
|
posix_ipc.o \
|
|
pseudo-reloc.o \
|
|
pthread.o \
|
|
quotactl.o \
|
|
random.o \
|
|
regcomp.o \
|
|
regerror.o \
|
|
regexec.o \
|
|
regfree.o \
|
|
registry.o \
|
|
resource.o \
|
|
rexec.o \
|
|
rcmd.o \
|
|
scandir.o \
|
|
sched.o \
|
|
sec_acl.o \
|
|
sec_auth.o \
|
|
sec_helper.o \
|
|
sec_posixacl.o \
|
|
security.o \
|
|
select.o \
|
|
sem.o \
|
|
setlsapwd.o \
|
|
shared.o \
|
|
shm.o \
|
|
sigfe.o \
|
|
signal.o \
|
|
sigproc.o \
|
|
smallprint.o \
|
|
spawn.o \
|
|
strace.o \
|
|
strfmon.o \
|
|
strfuncs.o \
|
|
strptime.o \
|
|
strsep.o \
|
|
strsig.o \
|
|
sync.o \
|
|
syscalls.o \
|
|
sysconf.o \
|
|
syslog.o \
|
|
termios.o \
|
|
thread.o \
|
|
timer.o \
|
|
timerfd.o \
|
|
times.o \
|
|
tls_pbuf.o \
|
|
tty.o \
|
|
uinfo.o \
|
|
uname.o \
|
|
wait.o \
|
|
wincap.o \
|
|
window.o \
|
|
winf.o \
|
|
xsique.o \
|
|
$(EXTRA_OFILES) \
|
|
$(MALLOC_OFILES) \
|
|
$(MATH_OFILES) \
|
|
$(MT_SAFE_OBJECTS)
|
|
|
|
EXCLUDE_STATIC_OFILES:=$(addprefix --exclude=,\
|
|
cygtls.o \
|
|
dcrt0.o \
|
|
exceptions.o \
|
|
fork.o \
|
|
signal.o \
|
|
spawn.o \
|
|
)
|
|
|
|
VERSION_OFILES:=version.o winver.o
|
|
|
|
ifdef PREPROCESS
|
|
override DLL_OFILES:=$(patsubst %.o,%_E,${DLL_OFILES})
|
|
override EXCLUDE_STATIC_OFILES:=$(patsubst %.o,%_E,${EXCLUDE_STATIC_OFILES})
|
|
override EXTRA_OFILES=$(patsubst %.o,%_E,${DLL_OFILES}))
|
|
override MALLOC_OFILES:=$(patsubst %.o,%.E,${MALLOC_OFILES})
|
|
endif #PREPROCESS
|
|
|
|
ifeq ($(target_cpu),x86_64)
|
|
# Needed by mcountFunc.S to choose the right code path and symbol names
|
|
ASFLAGS:=-D_WIN64
|
|
endif
|
|
|
|
GMON_OFILES:=gmon.o mcount.o profil.o mcountFunc.o
|
|
|
|
NEW_FUNCTIONS:=$(addprefix --replace=,\
|
|
atexit= \
|
|
timezone= \
|
|
__xdrrec_getrec= \
|
|
__xdrrec_setnonblock= \
|
|
xdr_array= \
|
|
xdr_bool= \
|
|
xdr_bytes= \
|
|
xdr_char= \
|
|
xdr_double= \
|
|
xdr_enum= \
|
|
xdr_float= \
|
|
xdr_free= \
|
|
xdr_hyper= \
|
|
xdr_int= \
|
|
xdr_int16_t= \
|
|
xdr_int32_t= \
|
|
xdr_int64_t= \
|
|
xdr_int8_t= \
|
|
xdr_long= \
|
|
xdr_longlong_t= \
|
|
xdr_netobj= \
|
|
xdr_opaque= \
|
|
xdr_pointer= \
|
|
xdr_reference= \
|
|
xdr_short= \
|
|
xdr_sizeof= \
|
|
xdr_string= \
|
|
xdr_u_char= \
|
|
xdr_u_hyper= \
|
|
xdr_u_int= \
|
|
xdr_u_int16_t= \
|
|
xdr_u_int32_t= \
|
|
xdr_u_int64_t= \
|
|
xdr_u_int8_t= \
|
|
xdr_u_long= \
|
|
xdr_u_longlong_t= \
|
|
xdr_u_short= \
|
|
xdr_uint16_t= \
|
|
xdr_uint32_t= \
|
|
xdr_uint64_t= \
|
|
xdr_uint8_t= \
|
|
xdr_union= \
|
|
xdr_vector= \
|
|
xdr_void= \
|
|
xdr_wrapstring= \
|
|
xdrmem_create= \
|
|
xdrrec_create= \
|
|
xdrrec_endofrecord= \
|
|
xdrrec_eof= \
|
|
xdrrec_skiprecord= \
|
|
xdrstdio_create= \
|
|
)
|
|
ifeq ($(target_cpu),x86_64)
|
|
NEW_FUNCTIONS+=
|
|
else
|
|
NEW_FUNCTIONS+=$(addprefix --replace=,\
|
|
acl=_acl32 \
|
|
aclcheck=_aclcheck32 \
|
|
aclfrommode=_aclfrommode32 \
|
|
aclfrompbits=_aclfrompbits32 \
|
|
aclfromtext=_aclfromtext32 \
|
|
aclsort=_aclsort32 \
|
|
acltomode=_acltomode32 \
|
|
acltopbits=_acltopbits32 \
|
|
acltotext=_acltotext32 \
|
|
chown=_chown32 \
|
|
facl=_facl32 \
|
|
fchown=_fchown32 \
|
|
fcntl=_fcntl64 \
|
|
fdopen=_fdopen64 \
|
|
fgetpos=_fgetpos64 \
|
|
fopen=_fopen64 \
|
|
freopen=_freopen64 \
|
|
fseeko=_fseeko64 \
|
|
fsetpos=_fsetpos64 \
|
|
fstat=_fstat64 \
|
|
ftello=_ftello64 \
|
|
ftruncate=_ftruncate64 \
|
|
getegid=_getegid32 \
|
|
geteuid=_geteuid32 \
|
|
getgid=_getgid32 \
|
|
getgrent=_getgrent32 \
|
|
getgrgid=_getgrgid32 \
|
|
getgrnam=_getgrnam32 \
|
|
getgroups=_getgroups32 \
|
|
getpwuid=_getpwuid32 \
|
|
getpwuid_r=_getpwuid_r32 \
|
|
getuid=_getuid32 \
|
|
initgroups=_initgroups32 \
|
|
lchown=_lchown32 \
|
|
lseek=_lseek64 \
|
|
lstat=_lstat64 \
|
|
mknod=_mknod32 \
|
|
mmap=_mmap64 \
|
|
open=_open64 \
|
|
setegid=_setegid32 \
|
|
seteuid=_seteuid32 \
|
|
setgid=_setgid32 \
|
|
setgroups=_setgroups32 \
|
|
setregid=_setregid32 \
|
|
setreuid=_setreuid32 \
|
|
setuid=_setuid32 \
|
|
stat=_stat64 \
|
|
tmpfile=_tmpfile64 \
|
|
truncate=_truncate64 \
|
|
)
|
|
endif
|
|
|
|
API_VER:=$(srcdir)/include/cygwin/version.h
|
|
|
|
LIB_NAME:=libcygwin.a
|
|
SUBLIBS:=libpthread.a libutil.a ${CURDIR}/libm.a ${CURDIR}/libc.a libdl.a libresolv.a librt.a libacl.a libssp.a
|
|
EXTRALIBS:=libautomode.a libbinmode.a libtextmode.a libtextreadmode.a
|
|
INSTOBJS:=automode.o binmode.o textmode.o textreadmode.o
|
|
TARGET_LIBS:=$(LIB_NAME) $(CYGWIN_START) $(GMON_START) $(LIBGMON_A) $(SUBLIBS) $(INSTOBJS) $(EXTRALIBS)
|
|
|
|
ifneq "${filter -O%,$(CFLAGS)}" ""
|
|
dtable_CFLAGS:=-fcheck-new
|
|
localtime_CFLAGS:=-fwrapv
|
|
malloc_CFLAGS:=-O3
|
|
sync_CFLAGS:=-O3
|
|
ifeq ($(target_cpu),i686)
|
|
# on x86, exceptions.cc must be compiled with a frame-pointer as it uses RtlCaptureContext()
|
|
exceptions_CFLAGS:=-fno-omit-frame-pointer
|
|
endif
|
|
endif
|
|
|
|
fhandler_proc_CFLAGS+=-DUSERNAME="\"$(USER)\"" -DHOSTNAME="\"$(HOSTNAME)\""
|
|
fhandler_proc_CFLAGS+=-DGCC_VERSION="\"`$(CC) -v 2>&1 | tail -n 1`\""
|
|
|
|
_cygwin_crt0_common_STDINCFLAGS:=yes
|
|
libstdcxx_wrapper_STDINCFLAGS:=yes
|
|
cxx_STDINCFLAGS:=yes
|
|
|
|
.PHONY: all force dll_ofiles install all_target install_target all_host \
|
|
install_host install install-libs install-headers \
|
|
clean distclean realclean maintainer-clean
|
|
|
|
all_host=@all_host@
|
|
install_host=@install_host@
|
|
|
|
all: all_target $(all_host)
|
|
|
|
all_target: $(TARGET_LIBS)
|
|
|
|
all_host: $(TEST_LIB_NAME)
|
|
|
|
force:
|
|
|
|
install: install-libs install-headers install-man install-ldif install_target \
|
|
$(install_host) $(install_target)
|
|
|
|
uninstall: uninstall-libs uninstall-headers uninstall-man
|
|
|
|
install-libs: $(TARGET_LIBS)
|
|
@$(MKDIRP) $(DESTDIR)$(bindir)
|
|
$(INSTALL_PROGRAM) $(TEST_DLL_NAME) $(DESTDIR)$(bindir)/$(DLL_NAME); \
|
|
for i in $^; do \
|
|
$(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/lib/`basename $$i` ; \
|
|
done
|
|
cd $(DESTDIR)$(tooldir)/lib && ln -sf libcygwin.a libg.a
|
|
|
|
install-headers:
|
|
cd $(srcdir); \
|
|
for sub in `find include -name '[a-z]*' -type d -print | sort`; do \
|
|
$(MKDIRP) $(DESTDIR)$(tooldir)/$$sub; \
|
|
for i in $$sub/*.h ; do \
|
|
$(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/$$sub/`basename $$i` ; \
|
|
done ; \
|
|
done ; \
|
|
|
|
install-man:
|
|
@$(MKDIRP) $(DESTDIR)$(mandir)/man2 $(DESTDIR)$(mandir)/man3 $(DESTDIR)$(mandir)/man5 $(DESTDIR)$(mandir)/man7
|
|
cd $(srcdir); \
|
|
for i in `find . -type f ! -path './release/*' -name '*.2'`; do \
|
|
$(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man2/`basename $$i` ; \
|
|
done; \
|
|
for i in `find . -type f ! -path './release/*' -name '*.3'`; do \
|
|
$(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man3/`basename $$i` ; \
|
|
done; \
|
|
for i in `find . -type f ! -path './release/*' -name '*.5'`; do \
|
|
$(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man5/`basename $$i` ; \
|
|
done; \
|
|
for i in `find . -type f ! -path './release/*' -name '*.7'`; do \
|
|
$(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man7/`basename $$i` ; \
|
|
done
|
|
|
|
install-ldif:
|
|
@$(MKDIRP) $(DESTDIR)$(datarootdir)/cygwin
|
|
$(INSTALL_DATA) $(srcdir)/cygwin.ldif $(DESTDIR)$(datarootdir)/cygwin
|
|
|
|
install_target:
|
|
|
|
install_host:
|
|
|
|
uninstall-libs: $(TARGET_LIBS)
|
|
rm -f $(bindir)/$(DLL_NAME); \
|
|
for i in $^; do \
|
|
rm -f $(tooldir)/lib/$$i ; \
|
|
done
|
|
|
|
uninstall-headers:
|
|
cd $(srcdir); \
|
|
for sub in `find include -name '[a-z]*' -type d -print | sort`; do \
|
|
for i in $$sub/*.h ; do \
|
|
rm -f $(tooldir)/$$sub/`basename $$i` ; \
|
|
done ; \
|
|
done ; \
|
|
|
|
uninstall-man:
|
|
cd $(srcdir); \
|
|
for i in `find . -type f -name '*.2'`; do \
|
|
rm -f $(DESTDIR)$(mandir)/man2/`basename $$i` ; \
|
|
done; \
|
|
for i in `find . -type f -name '*.3'`; do \
|
|
rm -f $(DESTDIR)$(mandir)/man3/`basename $$i` ; \
|
|
done; \
|
|
for i in `find . -type f -name '*.5'`; do \
|
|
rm -f $(DESTDIR)$(mandir)/man5/`basename $$i` ; \
|
|
done; \
|
|
for i in `find . -type f -name '*.7'`; do \
|
|
rm -f $(DESTDIR)$(mandir)/man7/`basename $$i` ; \
|
|
done
|
|
|
|
clean distclean realclean:
|
|
-rm -f *.o *.dll *.dbg *.a *.exp junk *.base version.cc *.exe *.d *stamp* *_magic.h sigfe.s cygwin.def globals.h
|
|
-@$(MAKE) -C ${cygserver_blddir} libclean
|
|
|
|
maintainer-clean: clean
|
|
@echo "This command is intended for maintainers to use;"
|
|
@echo "it deletes files that may require special tools to rebuild."
|
|
-rm -fr configure
|
|
-rm -f $(srcdir)/$(TLSOFFSETS_H) $(srcdir)/devices.cc
|
|
|
|
# Rule to build LDSCRIPT
|
|
$(LDSCRIPT): $(LDSCRIPT).in
|
|
$(CC) -E - -P < $^ -o $@
|
|
|
|
# Rule to build cygwin.dll
|
|
$(TEST_DLL_NAME): $(LDSCRIPT) dllfixdbg $(DLL_OFILES) $(LIBSERVER) $(LIBC) $(LIBM) $(API_VER) Makefile $(VERSION_OFILES)
|
|
$(CXX) $(CXXFLAGS) \
|
|
-mno-use-libstdc-wrappers -L${WINDOWS_LIBDIR} \
|
|
-Wl,--gc-sections $(nostdlib) -Wl,-T$(firstword $^) -static \
|
|
-Wl,--heap=0 -Wl,--out-implib,cygdll.a -shared -o $@ \
|
|
-e $(DLL_ENTRY) $(DEF_FILE) $(DLL_OFILES) $(VERSION_OFILES) \
|
|
$(MALLOC_OBJ) $(LIBSERVER) $(LIBM) $(LIBC) \
|
|
-lgcc $(DLL_IMPORTS) -Wl,-Map,cygwin.map
|
|
@$(word 2,$^) $(OBJDUMP) $(OBJCOPY) $@ ${patsubst %0.dll,%1.dbg,$@}
|
|
@ln -f $@ new-$(DLL_NAME)
|
|
|
|
# Rule to build libcygwin.a
|
|
$(LIB_NAME): $(DEF_FILE) $(LIBCOS) | $(TEST_DLL_NAME)
|
|
${srcdir}/mkimport ${toolopts} ${NEW_FUNCTIONS} $@ cygdll.a $(wordlist 2,99,$^)
|
|
|
|
${STATIC_LIB_NAME}: mkstatic ${TEST_DLL_NAME}
|
|
perl -d $< -x ${EXCLUDE_STATIC_OFILES} --library=${LIBC} --library=${LIBM} --ar=${AR} $@ cygwin.map
|
|
|
|
# Rule to make stub library used by testsuite
|
|
# dependency set to $(LIB_NAME) to accommodate make -j2.
|
|
$(TEST_LIB_NAME): $(LIB_NAME)
|
|
perl -p -e 'BEGIN{binmode(STDIN); binmode(STDOUT);}; s/cygwin1/cygwin0/g' < $? > $@
|
|
|
|
$(LIBSERVER): ${cygserver_blddir}/Makefile
|
|
$(MAKE) -C ${cygserver_blddir} libcygserver.a
|
|
|
|
${cygserver_blddir}/Makefile:
|
|
/bin/mkdir -p ${@D}
|
|
cd ${@D} && exec /bin/sh $(dir ${srcdir})/cygserver/configure ${configure_args}
|
|
|
|
dll_ofiles: $(DLL_OFILES)
|
|
|
|
$(LIBGMON_A): $(GMON_OFILES) $(GMON_START)
|
|
$(AR) rcv $(LIBGMON_A) $(GMON_OFILES)
|
|
|
|
globals.h: mkglobals_h globals.cc
|
|
$^ > $@
|
|
|
|
${DLL_OFILES} ${LIBCOS}: globals.h $(srcdir)/$(TLSOFFSETS_H)
|
|
|
|
shared_info_magic.h: cygmagic shared_info.h
|
|
/bin/sh $(word 1,$^) $@ "${COMPILE.cc} -E -x c++" $(word 2,$^) SHARED_MAGIC 'class shared_info' USER_MAGIC 'class user_info'
|
|
|
|
child_info_magic.h: cygmagic child_info.h
|
|
/bin/sh $(word 1,$^) $@ "${COMPILE.cc} -E -x c++" $(word 2,$^) CHILD_INFO_MAGIC 'class child_info'
|
|
|
|
dcrt0.o sigproc.o: child_info_magic.h
|
|
|
|
shared.o: shared_info_magic.h
|
|
|
|
$(srcdir)/devices.cc: gendevices devices.in devices.h
|
|
${wordlist 1,2,$^} $@
|
|
|
|
${CURDIR}/libc.a: ${LIB_NAME} ${CURDIR}/libm.a libpthread.a libutil.a
|
|
${speclib} -v ${@F}
|
|
|
|
${CURDIR}/libm.a: ${LIB_NAME} $(LIBM) $(MATH_OFILES)
|
|
${speclib} ${@F}
|
|
|
|
libpthread.a: ${LIB_NAME} pthread.o thread.o
|
|
${speclib} ${@F}
|
|
|
|
libutil.a: ${LIB_NAME} bsdlib.o
|
|
${speclib} ${@F}
|
|
|
|
libdl.a: ${LIB_NAME} dlfcn.o
|
|
${speclib} ${@F}
|
|
|
|
libresolv.a: ${LIB_NAME} minires.o
|
|
${speclib} ${@F}
|
|
|
|
librt.a: ${LIB_NAME} posix_ipc.o
|
|
${speclib} ${@F}
|
|
|
|
libacl.a: ${LIB_NAME} sec_posixacl.o
|
|
${speclib} ${@F}
|
|
|
|
libssp.a: ${LIB_NAME} $(newlib_build)/libc/ssp/lib.a
|
|
${speclib} ${@F}
|
|
|
|
${EXTRALIBS}: lib%.a: %.o
|
|
$(AR) cru $@ $?
|
|
|
|
winver.o: mkvers.sh include/cygwin/version.h winver.rc $(DLL_OFILES)
|
|
@echo "Making version.cc and winver.o";\
|
|
/bin/sh ${word 1,$^} ${word 2,$^} ${word 3,$^} $(WINDRES) ${CFLAGS} $(addprefix -I,${CCWRAP_SYSTEM_HEADERS} ${CCWRAP_DIRAFTER_HEADERS})
|
|
|
|
version.cc: winver.o
|
|
|
|
Makefile: ${srcdir}/Makefile.in
|
|
/bin/sh ./config.status
|
|
|
|
$(DEF_FILE): gendef $(srcdir)/$(TLSOFFSETS_H) $(DIN_FILE)
|
|
$(word 1,$^) --cpu=${target_cpu} --output-def=$@ --tlsoffsets=$(word 2,$^) $(wordlist 3,99,$^)
|
|
|
|
$(srcdir)/$(TLSOFFSETS_H): gentls_offsets cygtls.h
|
|
$^ $@ $(target_cpu) $(COMPILE.cc) -c || rm $@
|
|
|
|
sigfe.s: $(DEF_FILE)
|
|
@[ -s $@ ] || \
|
|
{ rm -f $(DEF_FILE); $(MAKE) -s -j1 $(DEF_FILE); }; \
|
|
[ -s $@ ] && touch $@
|
|
|
|
sigfe.o: sigfe.s $(srcdir)/$(TLSOFFSETS_H)
|
|
$(CC) ${CFLAGS} -c -o $@ $<
|
|
|
|
ctags: CTAGS
|
|
tags: CTAGS
|
|
CTAGS:
|
|
-cd $(srcdir) && \
|
|
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q \
|
|
--regex-C++='/EXPORT_ALIAS *\([a-zA-Z0-9_]*, *([a-zA-Z0-9_]*)\)/\1/' \
|
|
--regex-C++='/__ASMNAME *\("([a-zA-Z0-9_]+)"\)/\1/' \
|
|
@newlib_headers@ .
|
|
|
|
deps:=${wildcard *.d}
|
|
ifneq (,$(deps))
|
|
include $(deps)
|
|
endif
|
|
|
|
%: RCS/%,v
|