X-Git-Url: https://git.saurik.com/apple/mdnsresponder.git/blobdiff_plain/9f221bca50017164b24018386876f8780876ef6d..c71e3068dca7ed8b0536b4ce3fe0552e9f39d389:/mDNSPosix/Makefile diff --git a/mDNSPosix/Makefile b/mDNSPosix/Makefile index 4f98e90..16477ce 100755 --- a/mDNSPosix/Makefile +++ b/mDNSPosix/Makefile @@ -1,6 +1,6 @@ # -*- tab-width: 4 -*- # -# Copyright (c) 2002-2004, 2015, Apple Computer, Inc. All rights reserved. +# Copyright (c) 2002-2019 Apple Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -52,47 +52,69 @@ LIBVERS = 1 COREDIR = ../mDNSCore SHAREDDIR ?= ../mDNSShared +DSODIR ?= ../DSO JDK = /usr/jdk -CC = @cc -BISON = @bison -FLEX = @flex -ST = @strip -LD = ld -shared +SYSTEM := $(shell uname -s) +ifeq ($(SYSTEM), Darwin) + os=x +else ifeq ($(SYSTEM), Linux) + os=linux +endif + +CC = cc +BISON = bison +FLEX = flex +ST = strip +LD = ld +SOOPTS = -shared CP = cp RM = rm LN = ln -s -f -CFLAGS_COMMON = -I$(COREDIR) -I$(SHAREDDIR) -I$(OBJDIR) -fwrapv -W -Wall -DPID_FILE=\"/var/run/mdnsd.pid\" -DMDNS_UDS_SERVERPATH=\"/var/run/mdnsd\" +CFLAGS_COMMON = -I$(COREDIR) -I$(SHAREDDIR) -I$(DSODIR) -I$(PROXYDIR) -I$(OBJDIR) -fwrapv -W -Wall -DPID_FILE=\"/var/run/mdnsd.pid\" -DMDNS_UDS_SERVERPATH=\"/var/run/mdnsd\" CFLAGS_PTHREAD = LINKOPTS = LINKOPTS_PTHREAD = -lpthread LDSUFFIX = so JAVACFLAGS_OS = -fPIC -shared -ldns_sd +ifeq "$(OPEN_SOURCE)" "1" +CFLAGS_OPEN_SOURCE=-D__OPEN_SOURCE__ +else +CFLAGS_OPEN_SOURCE= +endif + # Set up diverging paths for debug vs. prod builds -DEBUG=0 -ifeq ($(DEBUG),1) -CFLAGS_DEBUG = -g -DMDNS_DEBUGMSGS=2 +ifeq "$(DEBUG)" "1" +CFLAGS_DEBUGGING = -g -DMDNS_DEBUGMSGS=2 OBJDIR = objects/debug BUILDDIR = build/debug STRIP = echo else +ifeq "$(DEBUGSYMS)" "1" +CFLAGS_DEBUGGING = -g -DMDNS_DEBUGMSGS=0 +OBJDIR = objects/prod +BUILDDIR = build/prod +STRIP = echo +else # We use -Os for two reasons: # 1. We want to make small binaries, suitable for putting into hardware devices # 2. Some of the code analysis warnings only work when some form of optimization is enabled -CFLAGS_DEBUG = -Os -DMDNS_DEBUGMSGS=0 +CFLAGS_DEBUGGING = -g -DMDNS_DEBUGMSGS=0 OBJDIR ?= objects/prod BUILDDIR ?= build/prod STRIP = $(ST) -S endif +endif # Configure per-OS peculiarities ifeq ($(os),solaris) -CFLAGS_DEBUG = -O0 -DMDNS_DEBUGMSGS=0 +CFLAGS_DEBUGGING = -O0 -DMDNS_DEBUGMSGS=0 CFLAGS_OS = -DNOT_HAVE_DAEMON -DNOT_HAVE_SA_LEN -DNOT_HAVE_SOCKLEN_T -DNOT_HAVE_IF_NAMETOINDEX \ -DLOG_PERROR=0 -D_XPG4_2 -D__EXTENSIONS__ -DHAVE_BROKEN_RECVIF_NAME -DTARGET_OS_SOLARIS CC = gcc -LD = gcc -shared +LD = gcc +SOOPTS = -shared LINKOPTS = -lsocket -lnsl -lresolv JAVACFLAGS_OS += -I$(JDK)/include/solaris ifneq ($(DEBUG),1) @@ -102,8 +124,9 @@ else # any target that contains the string "linux" ifeq ($(findstring linux,$(os)),linux) -CFLAGS_OS = -D_GNU_SOURCE -DHAVE_IPV6 -DNOT_HAVE_SA_LEN -DUSES_NETLINK -DHAVE_LINUX -DTARGET_OS_LINUX -fno-strict-aliasing -LD = $(CC) -shared +CFLAGS_OS = -D_GNU_SOURCE -DHAVE_IPV6 -DNOT_HAVE_SA_LEN -DUSES_NETLINK -DHAVE_LINUX -DTARGET_OS_LINUX -ftabstop=4 +LD = $(CC) +SOOPTS = -shared FLEXFLAGS_OS = -l JAVACFLAGS_OS += -I$(JDK)/include/linux @@ -146,10 +169,11 @@ ifeq ($(os),x) # we get build failures: ‘daemon’ is deprecated (declared at /usr/include/stdlib.h:283) CFLAGS_OS = -DHAVE_IPV6 -no-cpp-precomp -Werror -Wdeclaration-after-statement \ -D__MAC_OS_X_VERSION_MIN_REQUIRED=__MAC_OS_X_VERSION_10_4 \ - -DHAVE_STRLCPY=1 \ + -DHAVE_STRLCPY=1 -DTARGET_OS_MAC \ -D__APPLE_USE_RFC_2292 #-Wunreachable-code CC = gcc -LD = $(CC) -dynamiclib +LD = $(CC) +SOOPTS = -dynamiclib LINKOPTS = -lSystem LDSUFFIX = dylib JDK = /System/Library/Frameworks/JavaVM.framework/Home @@ -174,6 +198,7 @@ NSSINSTPATH := /lib # If not otherwise defined, we install into /usr/lib and /usr/include # and our startup script is called mdns (e.g. /etc/init.d/mdns) +ETCBASE?=/etc INSTBASE?=/usr STARTUPSCRIPTNAME?=mdns @@ -197,328 +222,3 @@ ifeq ($(wildcard /etc/init.d/rc2.d/), /etc/init.d/rc2.d/) STARTUPSCRIPTDIR = /etc/init.d RUNLEVELSCRIPTSDIR = /etc/init.d else -# else if directory /etc/rc.d/init.d/ exists, then we install into that (old Linux) -ifeq ($(wildcard /etc/rc.d/init.d/), /etc/rc.d/init.d/) -STARTUPSCRIPTDIR = /etc/rc.d/init.d -RUNLEVELSCRIPTSDIR = /etc/rc.d -else -# else if directory /etc/init.d/ exists, then we install into that (new Linux) -ifeq ($(wildcard /etc/init.d/), /etc/init.d/) -STARTUPSCRIPTDIR = /etc/init.d -RUNLEVELSCRIPTSDIR = /etc -else -# else install into /etc/rc.d/ (*BSD) -STARTUPSCRIPTDIR = $(INSTBASE)/etc/rc.d -endif -endif -endif - -CFLAGS = $(CFLAGS_COMMON) $(CFLAGS_OS) $(CFLAGS_DEBUG) - -############################################################################# - -all: setup Daemon libdns_sd Clients SAClient SAResponder SAProxyResponder Identify NetMonitor $(OPTIONALTARG) - -install: setup InstalledStartup InstalledDaemon InstalledLib InstalledManPages InstalledClients $(OPTINSTALL) - -# 'setup' sets up the build directory structure the way we want -setup: - @if test ! -d $(OBJDIR) ; then mkdir -p $(OBJDIR) ; fi - @if test ! -d $(BUILDDIR) ; then mkdir -p $(BUILDDIR) ; fi - -# clean removes targets and objects -clean: - @if test -d $(OBJDIR) ; then rm -r $(OBJDIR) ; fi - @if test -d $(BUILDDIR) ; then rm -r $(BUILDDIR) ; fi - @$(MAKE) -C ../Clients clean - -############################################################################# - -# daemon target builds the daemon -DAEMONOBJS = $(OBJDIR)/PosixDaemon.c.o $(OBJDIR)/mDNSPosix.c.o $(OBJDIR)/mDNSUNP.c.o $(OBJDIR)/mDNS.c.o \ - $(OBJDIR)/DNSDigest.c.o $(OBJDIR)/uDNS.c.o $(OBJDIR)/DNSCommon.c.o $(OBJDIR)/uds_daemon.c.o \ - $(OBJDIR)/mDNSDebug.c.o $(OBJDIR)/dnssd_ipc.c.o $(OBJDIR)/GenLinkedList.c.o $(OBJDIR)/PlatformCommon.c.o \ - $(OBJDIR)/CryptoAlg.c.o $(OBJDIR)/anonymous.c.o - -# dnsextd target build dnsextd -DNSEXTDOBJ = $(OBJDIR)/mDNSPosix.c.o $(OBJDIR)/mDNSUNP.c.o $(OBJDIR)/mDNSDebug.c.o $(OBJDIR)/GenLinkedList.c.o $(OBJDIR)/DNSDigest.c.o \ - $(OBJDIR)/DNSCommon.c.o $(OBJDIR)/PlatformCommon.c.o $(OBJDIR)/dnsextd_parser.y.o $(OBJDIR)/dnsextd_lexer.l.o \ - $(OBJDIR)/CryptoAlg.c.o - -Daemon: setup $(BUILDDIR)/mdnsd - @echo "Responder daemon done" - -$(BUILDDIR)/mdnsd: $(DAEMONOBJS) - $(CC) -o $@ $+ $(LINKOPTS) - @$(STRIP) $@ - -# libdns_sd target builds the client library -libdns_sd: setup $(BUILDDIR)/libdns_sd.$(LDSUFFIX) - @echo "Client library done" - -CLIENTLIBOBJS = $(OBJDIR)/dnssd_clientlib.c.so.o $(OBJDIR)/dnssd_clientstub.c.so.o $(OBJDIR)/dnssd_ipc.c.so.o - -$(BUILDDIR)/libdns_sd.$(LDSUFFIX): $(CLIENTLIBOBJS) - @$(LD) $(LINKOPTS) -o $@ $+ - @$(STRIP) $@ - -Clients: setup libdns_sd ../Clients/build/dns-sd - @echo "Clients done" - -../Clients/build/dns-sd: - @$(MAKE) -C ../Clients - -# nss_mdns target builds the Name Service Switch module -nss_mdns: setup $(BUILDDIR)/$(NSSLIBFILE) - @echo "Name Service Switch module done" - -$(BUILDDIR)/$(NSSLIBFILE): $(CLIENTLIBOBJS) $(OBJDIR)/nss_mdns.c.so.o - @$(LD) $(LINKOPTS) -o $@ $+ - @$(STRIP) $@ - -############################################################################# - -# The Install targets place built stuff in their proper places -InstalledDaemon: $(INSTBASE)/sbin/mdnsd - @echo $+ " installed" - -InstalledLib: $(INSTBASE)/lib/libdns_sd.$(LDSUFFIX).$(LIBVERS) $(INSTBASE)/include/dns_sd.h - @echo $+ " installed" - -InstalledStartup: $(STARTUPSCRIPTDIR)/$(STARTUPSCRIPTNAME) - @echo $+ " installed" - -InstalledManPages: $(MANPATH)/man8/mdnsd.8 - @echo $+ " installed" - -InstalledClients: $(INSTBASE)/bin/dns-sd - @echo $+ " installed" - -InstalledNSS: $(NSSINSTPATH)/$(NSSLINKNAME) /etc/nss_mdns.conf $(MANPATH)/man5/nss_mdns.conf.5 $(MANPATH)/man8/libnss_mdns.8 - @echo $+ " installed" - -# Note: If daemon already installed, we make sure it's stopped before overwriting it -$(INSTBASE)/sbin/mdnsd: $(BUILDDIR)/mdnsd $(STARTUPSCRIPTDIR)/$(STARTUPSCRIPTNAME) - @if test -x $@; then $(STARTUPSCRIPTDIR)/$(STARTUPSCRIPTNAME) stop; fi - $(CP) $< $@ - @$(STARTUPSCRIPTDIR)/$(STARTUPSCRIPTNAME) start - -$(INSTBASE)/lib/libdns_sd.$(LDSUFFIX).$(LIBVERS): $(BUILDDIR)/libdns_sd.$(LDSUFFIX) - $(CP) $< $@ - $(LN) $@ $(INSTBASE)/lib/libdns_sd.$(LDSUFFIX) -ifdef LDCONFIG - # -m means 'merge into existing database', -R means 'rescan directories' - $(LDCONFIG) -mR -endif - -$(INSTBASE)/include/dns_sd.h: $(SHAREDDIR)/dns_sd.h - $(CP) $< $@ - -$(STARTUPSCRIPTDIR)/$(STARTUPSCRIPTNAME): mdnsd.sh $(STARTUPSCRIPTDIR) - $(CP) $< $@ - chmod ugo+x $@ -ifdef RUNLEVELSCRIPTSDIR -ifeq ($(wildcard $(RUNLEVELSCRIPTSDIR)/runlevels/default), $(RUNLEVELSCRIPTSDIR)/runlevels/default) - $(LN) $@ $(RUNLEVELSCRIPTSDIR)/runlevels/default/mdns -else - $(LN) $@ $(RUNLEVELSCRIPTSDIR)/rc2.d/S52mdns - $(LN) $@ $(RUNLEVELSCRIPTSDIR)/rc3.d/S52mdns - $(LN) $@ $(RUNLEVELSCRIPTSDIR)/rc4.d/S52mdns - $(LN) $@ $(RUNLEVELSCRIPTSDIR)/rc5.d/S52mdns - $(LN) $@ $(RUNLEVELSCRIPTSDIR)/rc0.d/K16mdns - $(LN) $@ $(RUNLEVELSCRIPTSDIR)/rc6.d/K16mdns -endif -endif - -$(MANPATH)/man5/%.5: %.5 - cp $< $@ - chmod 444 $@ - -$(MANPATH)/man8/%.8: %.8 - cp $< $@ - chmod 444 $@ - -$(MANPATH)/man8/mdnsd.8: $(SHAREDDIR)/mDNSResponder.8 - cp $< $@ - chmod 444 $@ - -$(INSTBASE)/bin/dns-sd: ../Clients/build/dns-sd - $(CP) $< $@ - -$(NSSINSTPATH)/$(NSSLINKNAME): $(NSSINSTPATH)/$(NSSLIBFILE) - $(LN) $< $@ - ldconfig - -$(NSSINSTPATH)/$(NSSLIBFILE): $(BUILDDIR)/$(NSSLIBFILE) - $(CP) $< $@ - chmod 444 $@ - -/etc/nss_mdns.conf: nss_mdns.conf - $(CP) $< $@ - chmod 444 $@ - # Check the nsswitch.conf file. - # If 'mdns' does not already appear on the "hosts:" line, then add it right before 'dns' - cp -f /etc/nsswitch.conf /etc/nsswitch.conf.pre-mdns - sed -e '/mdns/!s/^\(hosts:.*\)dns\(.*\)/\1mdns dns\2/' /etc/nsswitch.conf.pre-mdns > /etc/nsswitch.conf - -############################################################################# - -# The following targets build Java wrappers for the dns-sd.h API. -# Note that the JavaForXcode targets are used when building the project for OS X using Xcode - -JAVAC = $(JDK)/bin/javac -JAVAH = $(JDK)/bin/javah -JAVADOC = $(JDK)/bin/javadoc -JAR = $(JDK)/bin/jar -JAVACFLAGS = $(CFLAGS) $(JAVACFLAGS_OS) -I$(JDK)/include - -JavaForXcode_: setup $(BUILDDIR)/dns_sd.jar $(PROJECT_DERIVED_FILE_DIR)/DNSSD.java.h - @echo $@ done - -$(PROJECT_DERIVED_FILE_DIR)/DNSSD.java.h: $(OBJDIR)/DNSSD.java.h - @if test ! -d $(PROJECT_DERIVED_FILE_DIR) ; then mkdir -p $(PROJECT_DERIVED_FILE_DIR) ; fi - $(CP) $< $@ - -JavaForXcode_clean: - @if test -d $(OBJDIR) ; then rm -r $(OBJDIR) ; fi - @if test -f $(PROJECT_DERIVED_FILE_DIR)/DNSSD.java.h ; then $(RM) $(PROJECT_DERIVED_FILE_DIR)/DNSSD.java.h ; fi - @if test -f $(BUILDDIR)/dns_sd.jar ; then $(RM) $(BUILDDIR)/dns_sd.jar ; fi - @echo $@ done - -JavaForXcode_installhdrs: - @echo $@ NOOP - -JavaForXcode_install: JavaForXcode_ $(DSTROOT)/$(SYSTEM_LIBRARY_DIR)/Java/Extensions/dns_sd.jar - @echo $@ done - -$(DSTROOT)/$(SYSTEM_LIBRARY_DIR)/Java/Extensions/dns_sd.jar: $(BUILDDIR)/dns_sd.jar - @if test ! -d $(DSTROOT)/$(SYSTEM_LIBRARY_DIR)/Java/Extensions ; then mkdir -p $(DSTROOT)/$(SYSTEM_LIBRARY_DIR)/Java/Extensions ; fi - $(CP) $< $@ - -Java: setup $(BUILDDIR)/dns_sd.jar $(BUILDDIR)/libjdns_sd.$(LDSUFFIX) - @echo "Java wrappers done" - -JAVASRC = $(SHAREDDIR)/Java -JARCONTENTS = $(OBJDIR)/com/apple/dnssd/DNSSDService.class \ - $(OBJDIR)/com/apple/dnssd/DNSSDException.class \ - $(OBJDIR)/com/apple/dnssd/DNSRecord.class \ - $(OBJDIR)/com/apple/dnssd/TXTRecord.class \ - $(OBJDIR)/com/apple/dnssd/DNSSDRegistration.class \ - $(OBJDIR)/com/apple/dnssd/BaseListener.class \ - $(OBJDIR)/com/apple/dnssd/BrowseListener.class \ - $(OBJDIR)/com/apple/dnssd/ResolveListener.class \ - $(OBJDIR)/com/apple/dnssd/RegisterListener.class \ - $(OBJDIR)/com/apple/dnssd/QueryListener.class \ - $(OBJDIR)/com/apple/dnssd/DomainListener.class \ - $(OBJDIR)/com/apple/dnssd/RegisterRecordListener.class \ - $(OBJDIR)/com/apple/dnssd/DNSSDRecordRegistrar.class \ - $(OBJDIR)/com/apple/dnssd/DNSSD.class - -$(BUILDDIR)/dns_sd.jar: $(JARCONTENTS) setup - $(JAR) -cf $@ -C $(OBJDIR) com - -$(BUILDDIR)/libjdns_sd.$(LDSUFFIX): $(JAVASRC)/JNISupport.c $(OBJDIR)/DNSSD.java.h setup libdns_sd - $(CC) -o $@ $< $(JAVACFLAGS) -I$(OBJDIR) -L$(BUILDDIR) - -$(OBJDIR)/com/apple/dnssd/%.class: $(JAVASRC)/%.java - $(JAVAC) -d $(OBJDIR) -classpath $(OBJDIR) $< - -$(OBJDIR)/DNSSD.java.h: $(OBJDIR)/com/apple/dnssd/DNSSD.class - $(JAVAH) -force -classpath $(OBJDIR) -o $@ \ - com.apple.dnssd.AppleDNSSD \ - com.apple.dnssd.AppleBrowser \ - com.apple.dnssd.AppleResolver \ - com.apple.dnssd.AppleRegistration \ - com.apple.dnssd.AppleQuery \ - com.apple.dnssd.AppleDomainEnum \ - com.apple.dnssd.AppleService \ - com.apple.dnssd.AppleDNSRecord \ - com.apple.dnssd.AppleRecordRegistrar - -############################################################################# - -# The following target builds documentation for the Java wrappers. - -JavaDoc: Java setup - $(JAVADOC) $(JAVASRC)/*.java -classpath $(OBJDIR) -d $(BUILDDIR) -public - -############################################################################# - -# The following targets build embedded example programs -SPECIALOBJ = $(OBJDIR)/mDNSPosix.c.o $(OBJDIR)/mDNSUNP.c.o $(OBJDIR)/mDNSDebug.c.o $(OBJDIR)/GenLinkedList.c.o \ - $(OBJDIR)/DNSDigest.c.o $(OBJDIR)/uDNS.c.o $(OBJDIR)/DNSCommon.c.o $(OBJDIR)/PlatformCommon.c.o \ - $(OBJDIR)/CryptoAlg.c.o $(OBJDIR)/anonymous.c.o -COMMONOBJ = $(SPECIALOBJ) $(OBJDIR)/mDNS.c.o -APPOBJ = $(COMMONOBJ) $(OBJDIR)/ExampleClientApp.c.o - -SAClient: setup $(BUILDDIR)/mDNSClientPosix - @echo "Embedded Standalone Client done" - -SAResponder: setup $(BUILDDIR)/mDNSResponderPosix - @echo "Embedded Standalone Responder done" - -SAProxyResponder: setup $(BUILDDIR)/mDNSProxyResponderPosix - @echo "Embedded Standalone ProxyResponder done" - -Identify: setup $(BUILDDIR)/mDNSIdentify - @echo "Identify done" - -NetMonitor: setup $(BUILDDIR)/mDNSNetMonitor - @echo "NetMonitor done" - -dnsextd: setup $(BUILDDIR)/dnsextd - @echo "dnsextd done" - -$(BUILDDIR)/mDNSClientPosix: $(APPOBJ) $(OBJDIR)/Client.c.o - $(CC) $+ -o $@ $(LINKOPTS) - -$(BUILDDIR)/mDNSResponderPosix: $(COMMONOBJ) $(OBJDIR)/Responder.c.o - $(CC) $+ -o $@ $(LINKOPTS) - -$(BUILDDIR)/mDNSProxyResponderPosix: $(COMMONOBJ) $(OBJDIR)/ProxyResponder.c.o - $(CC) $+ -o $@ $(LINKOPTS) - -$(BUILDDIR)/mDNSIdentify: $(SPECIALOBJ) $(OBJDIR)/Identify.c.o - $(CC) $+ -o $@ $(LINKOPTS) - -$(OBJDIR)/Identify.c.o: $(COREDIR)/mDNS.c # Note: Identify.c textually imports mDNS.c - -$(BUILDDIR)/mDNSNetMonitor: $(SPECIALOBJ) $(OBJDIR)/NetMonitor.c.o - $(CC) $+ -o $@ $(LINKOPTS) - -$(OBJDIR)/NetMonitor.c.o: $(COREDIR)/mDNS.c # Note: NetMonitor.c textually imports mDNS.c - -$(BUILDDIR)/dnsextd: $(DNSEXTDOBJ) $(OBJDIR)/dnsextd.c.threadsafe.o - $(CC) $+ -o $@ $(LINKOPTS) $(LINKOPTS_PTHREAD) - -############################################################################# - -# Implicit rules -$(OBJDIR)/%.c.o: %.c - $(CC) $(CFLAGS) -c -o $@ $< - -$(OBJDIR)/%.c.o: $(COREDIR)/%.c - $(CC) $(CFLAGS) -c -o $@ $< - -$(OBJDIR)/%.c.o: $(SHAREDDIR)/%.c - $(CC) $(CFLAGS) -c -o $@ $< - -$(OBJDIR)/%.c.threadsafe.o: %.c - $(CC) $(CFLAGS) $(CFLAGS_PTHREAD) -D_REENTRANT -c -o $@ $< - -$(OBJDIR)/%.c.threadsafe.o: $(SHAREDDIR)/%.c - $(CC) $(CFLAGS) $(CFLAGS_PTHREAD) -D_REENTRANT -c -o $@ $< - -$(OBJDIR)/%.c.so.o: %.c - $(CC) $(CFLAGS) -c -fPIC -o $@ $< - -$(OBJDIR)/%.c.so.o: $(SHAREDDIR)/%.c - $(CC) $(CFLAGS) -c -fPIC -o $@ $< - -$(OBJDIR)/%.y.o: $(SHAREDDIR)/%.y - $(BISON) -o $(OBJDIR)/$*.c -d $< - $(CC) $(CFLAGS) -c -o $@ $(OBJDIR)/$*.c - -$(OBJDIR)/%.l.o: $(SHAREDDIR)/%.l - $(FLEX) $(FLEXFLAGS_OS) -i -o$(OBJDIR)/$*.l.c $< - $(CC) $(CFLAGS) -Wno-error -c -o $@ $(OBJDIR)/$*.l.c