You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

779 lines
16 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

#
# Library Makefile for CUPS.
#
# Copyright © 2007-2019 by Apple Inc.
# Copyright © 1997-2006 by Easy Software Products, all rights reserved.
#
# Licensed under Apache License v2.0. See the file "LICENSE" for more
# information.
#
include ../Makedefs
#
# Object files...
#
COREOBJS = \
array.o \
auth.o \
debug.o \
dest.o \
dest-job.o \
dest-localization.o \
dest-options.o \
dir.o \
encode.o \
file.o \
getputfile.o \
globals.o \
hash.o \
http.o \
http-addr.o \
http-addrlist.o \
http-support.o \
ipp.o \
ipp-file.o \
ipp-vars.o \
ipp-support.o \
langprintf.o \
language.o \
md5.o \
md5passwd.o \
notify.o \
options.o \
pwg-media.o \
raster-error.o \
raster-stream.o \
raster-stubs.o \
request.o \
snprintf.o \
string.o \
tempfile.o \
thread.o \
tls.o \
transcode.o \
usersys.o \
util.o
DRIVEROBJS = \
adminutil.o \
backchannel.o \
backend.o \
getdevices.o \
getifaddrs.o \
ppd.o \
ppd-attr.o \
ppd-cache.o \
ppd-conflicts.o \
ppd-custom.o \
ppd-emit.o \
ppd-localize.o \
ppd-mark.o \
ppd-page.o \
ppd-util.o \
raster-interpret.o \
raster-interstub.o \
sidechannel.o \
snmp.o
LIBOBJS = \
$(LIBCUPSOBJS)
IMAGEOBJS = \
raster-interstub.o \
raster-stubs.o
TESTOBJS = \
rasterbench.o \
testadmin.o \
testarray.o \
testcache.o \
testclient.o \
testconflicts.o \
testcreds.o \
testcups.o \
testdest.o \
testfile.o \
testgetdests.o \
testhttp.o \
testi18n.o \
testipp.o \
testoptions.o \
testlang.o \
testppd.o \
testpwg.o \
testraster.o \
testsnmp.o \
testthreads.o \
tlscheck.o
OBJS = \
$(LIBOBJS) \
$(IMAGEOBJS) \
$(TESTOBJS)
#
# Header files to install...
#
COREHEADERS = \
array.h \
cups.h \
dir.h \
file.h \
http.h \
ipp.h \
language.h \
pwg.h \
raster.h \
transcode.h \
versioning.h
DRIVERHEADERS = \
adminutil.h \
backend.h \
ppd.h \
sidechannel.h
HEADERS = \
$(LIBHEADERS)
COREHEADERSPRIV = \
array-private.h \
cups-private.h \
debug-private.h \
file-private.h \
http-private.h \
ipp-private.h \
language-private.h \
pwg-private.h \
raster-private.h \
string-private.h \
thread-private.h
DRIVERHEADERSPRIV = \
ppd-private.h \
snmp-private.h
HEADERSPRIV = \
$(LIBHEADERSPRIV)
#
# Targets in this directory...
#
LIBTARGETS = \
$(LIBCUPSIMAGE) \
$(LIBCUPSSTATIC) \
$(LIBCUPS) \
libcupsimage.a
UNITTARGETS = \
rasterbench \
testadmin \
testarray \
testcache \
testclient \
testconflicts \
testcreds \
testcups \
testdest \
testfile \
testgetdests \
testhttp \
testi18n \
testipp \
testlang \
testoptions \
testppd \
testpwg \
testraster \
testsnmp \
testthreads \
tlscheck
TARGETS = \
$(LIBTARGETS)
#
# Make all targets...
#
all: $(TARGETS)
#
# Make library targets...
#
libs: $(LIBTARGETS)
#
# Make unit tests...
#
unittests: $(UNITTARGETS)
#
# Remove object and target files...
#
clean:
$(RM) $(OBJS) $(TARGETS) $(UNITTARGETS)
$(RM) libcups.so libcups.dylib
$(RM) libcupsimage.so libcupsimage.dylib
#
# Update dependencies (without system header dependencies...)
#
depend:
$(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies
#
# Run oclint to check code coverage...
#
oclint:
oclint -o=oclint.html -html $(LIBOBJS:.o=.c) -- $(ALL_CFLAGS)
#
# Install all targets...
#
install: all install-data install-headers install-libs install-exec
#
# Install data files...
#
install-data:
#
# Install programs...
#
install-exec:
#
# Install headers...
#
install-headers:
echo Installing header files into $(INCLUDEDIR)/cups...
$(INSTALL_DIR) -m 755 $(INCLUDEDIR)/cups
for file in $(HEADERS); do \
$(INSTALL_DATA) $$file $(INCLUDEDIR)/cups; \
done
if test "x$(privateinclude)" != x; then \
echo Installing private header files into $(PRIVATEINCLUDE)...; \
$(INSTALL_DIR) -m 755 $(PRIVATEINCLUDE); \
for file in $(HEADERSPRIV); do \
$(INSTALL_DATA) $$file $(PRIVATEINCLUDE)/$$file; \
done; \
fi
#
# Install libraries...
#
install-libs: $(LIBTARGETS) $(INSTALLSTATIC)
echo Installing libraries in $(LIBDIR)...
$(INSTALL_DIR) -m 755 $(LIBDIR)
$(INSTALL_LIB) $(LIBCUPS) $(LIBDIR)
if test $(LIBCUPS) = "libcups.so.2"; then \
$(RM) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
$(LN) $(LIBCUPS) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
fi
if test $(LIBCUPS) = "libcups.2.dylib"; then \
$(RM) $(LIBDIR)/libcups.dylib; \
$(LN) $(LIBCUPS) $(LIBDIR)/libcups.dylib; \
fi
-if test "x$(LIBCUPSIMAGE)" != x; then \
$(INSTALL_LIB) $(LIBCUPSIMAGE) $(LIBDIR); \
fi
-if test "x$(LIBCUPSIMAGE)" = "xlibcupsimage.so.2"; then \
$(RM) $(LIBDIR)/`basename $(LIBCUPSIMAGE) .2`; \
$(LN) $(LIBCUPSIMAGE) $(LIBDIR)/`basename $(LIBCUPSIMAGE) .2`; \
fi
-if test "x$(LIBCUPSIMAGE)" = "xlibcupsimage.2.dylib"; then \
$(RM) $(LIBDIR)/libcupsimage.dylib; \
$(LN) $(LIBCUPSIMAGE) $(LIBDIR)/libcupsimage.dylib; \
fi
if test "x$(SYMROOT)" != "x"; then \
$(INSTALL_DIR) $(SYMROOT); \
cp $(LIBCUPS) $(SYMROOT); \
dsymutil $(SYMROOT)/$(LIBCUPS); \
if test "x$(LIBCUPSIMAGE)" != x; then \
cp $(LIBCUPSIMAGE) $(SYMROOT); \
dsymutil $(SYMROOT)/$(LIBCUPSIMAGE); \
fi; \
fi
installstatic:
$(INSTALL_DIR) -m 755 $(LIBDIR)
$(INSTALL_LIB) -m 755 $(LIBCUPSSTATIC) $(LIBDIR)
$(RANLIB) $(LIBDIR)/$(LIBCUPSSTATIC)
$(CHMOD) 555 $(LIBDIR)/$(LIBCUPSSTATIC)
$(INSTALL_LIB) -m 755 libcupsimage.a $(LIBDIR)
$(RANLIB) $(LIBDIR)/libcupsimage.a
$(CHMOD) 555 $(LIBDIR)/libcupsimage.a
#
# Uninstall object and target files...
#
uninstall:
$(RM) $(LIBDIR)/libcups.2.dylib
$(RM) $(LIBDIR)/libcups.a
$(RM) $(LIBDIR)/libcups.dylib
$(RM) $(LIBDIR)/libcups.so
$(RM) $(LIBDIR)/libcups.so.2
$(RM) $(LIBDIR)/libcupsimage.2.dylib
$(RM) $(LIBDIR)/libcupsimage.a
$(RM) $(LIBDIR)/libcupsimage.dylib
$(RM) $(LIBDIR)/libcupsimage.so
$(RM) $(LIBDIR)/libcupsimage.so.2
-$(RMDIR) $(LIBDIR)
for file in $(HEADERS); do \
$(RM) $(INCLUDEDIR)/cups/$$file; \
done
-$(RMDIR) $(INCLUDEDIR)/cups
if test "x$(privateinclude)" != x; then \
for file in $(HEADERSPRIV); do \
$(RM) $(PRIVATEINCLUDE)/cups/$$file; \
done
$(RMDIR) $(PRIVATEINCLUDE)/cups; \
fi
#
# libcups.so.2
#
libcups.so.2: $(LIBOBJS)
echo Linking $@...
$(DSO) $(ARCHFLAGS) $(ALL_DSOFLAGS) -o $@ $(LIBOBJS) $(LIBS)
$(RM) `basename $@ .2`
$(LN) $@ `basename $@ .2`
#
# libcups.2.dylib
#
libcups.2.dylib: $(LIBOBJS)
echo Linking $@...
$(DSO) $(ARCHFLAGS) $(ALL_DSOFLAGS) -o $@ \
-install_name $(libdir)/$@ \
-current_version 2.14.0 \
-compatibility_version 2.0.0 \
$(LIBOBJS) $(LIBS)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
$(RM) libcups.dylib
$(LN) $@ libcups.dylib
#
# libcups.la
#
libcups.la: $(LIBOBJS)
echo Linking $@...
$(LD_CC) $(ARCHFLAGS) $(ALL_DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) \
-rpath $(LIBDIR) -version-info 2:14 $(LIBS)
#
# libcups.a
#
libcups.a: $(LIBOBJS)
echo Archiving $@...
$(RM) $@
$(AR) $(ARFLAGS) $@ $(LIBOBJS)
$(RANLIB) $@
#
# libcups2.def (Windows DLL exports file...)
#
libcups2.def: $(LIBOBJS) $(IMAGEOBJS) Makefile
echo Generating $@...
echo "LIBRARY libcups2" >libcups2.def
echo "VERSION 2.14" >>libcups2.def
echo "EXPORTS" >>libcups2.def
(nm $(LIBOBJS) $(IMAGEOBJS) 2>/dev/null | grep "T _" | awk '{print $$3}'; \
echo __cups_strcpy; echo __cups_strlcat; echo __cups_strlcpy; \
echo __cups_snprintf; echo __cups_vsnprintf; echo __cups_gettimeofday) | \
grep -v -E \
-e 'cups_debug|Apple|BackChannel|Backend|FileCheck|Filter|GSSService|SetNegotiate|SideChannel|SNMP' \
-e 'Block$$' | \
sed -e '1,$$s/^_//' | sort >>libcups2.def
#
# libcupsimage.so.2
#
libcupsimage.so.2: $(IMAGEOBJS) libcups.so.2
echo Linking $@...
$(DSO) $(ARCHFLAGS) $(ALL_DSOFLAGS) -o $@ $(IMAGEOBJS) $(LINKCUPS)
$(RM) `basename $@ .2`
$(LN) $@ `basename $@ .2`
#
# libcupsimage.2.dylib
#
libcupsimage.2.dylib: $(IMAGEOBJS) libcups.2.dylib
echo Linking $@...
$(DSO) $(ARCHFLAGS) $(ALL_DSOFLAGS) -o $@ \
-install_name $(libdir)/$@ \
-current_version 2.3.0 \
-compatibility_version 2.0.0 \
$(IMAGEOBJS) $(LINKCUPS)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
$(RM) libcupsimage.dylib
$(LN) $@ libcupsimage.dylib
#
# libcupsimage.la
#
libcupsimage.la: $(IMAGEOBJS) libcups.la
echo Linking $@...
$(DSO) $(ARCHFLAGS) $(ALL_DSOFLAGS) -o $@ $(IMAGEOBJS:.o=.lo) \
$(LINKCUPS) -rpath $(LIBDIR) -version-info 2:3
#
# libcupsimage.a
#
libcupsimage.a: $(IMAGEOBJS)
echo Archiving $@...
$(RM) $@
$(AR) $(ARFLAGS) $@ $(IMAGEOBJS)
$(RANLIB) $@
#
# rasterbench (dependency on static CUPS library is intentional)
#
rasterbench: rasterbench.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ALL_LDFLAGS) -o $@ rasterbench.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
#
# testadmin (dependency on static CUPS library is intentional)
#
testadmin: testadmin.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ALL_LDFLAGS) -o $@ testadmin.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
#
# testarray (dependency on static CUPS library is intentional)
#
testarray: testarray.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testarray.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
echo Running array API tests...
./testarray
#
# testcache (dependency on static CUPS library is intentional)
#
testcache: testcache.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ALL_LDFLAGS) -o $@ testcache.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
#
# testclient (dependency on static libraries is intentional)
#
testclient: testclient.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ALL_LDFLAGS) -o $@ testclient.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
#
# testconflicts (dependency on static CUPS library is intentional)
#
testconflicts: testconflicts.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ALL_LDFLAGS) -o $@ testconflicts.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
#
# testcreds (dependency on static CUPS library is intentional)
#
testcreds: testcreds.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testcreds.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
#
# testcups (dependency on static CUPS library is intentional)
#
testcups: testcups.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ALL_LDFLAGS) -o $@ testcups.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
#
# testdest (dependency on static CUPS library is intentional)
#
testdest: testdest.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ALL_LDFLAGS) -o $@ testdest.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
#
# testfile (dependency on static CUPS library is intentional)
#
testfile: testfile.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testfile.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
echo Running file API tests...
./testfile
#
# testgetdests (dependency on static CUPS library is intentional)
#
testgetdests: testgetdests.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ALL_LDFLAGS) -o $@ testgetdests.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
#
# testhttp (dependency on static CUPS library is intentional)
#
testhttp: testhttp.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testhttp.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
echo Running HTTP API tests...
./testhttp
#
# testipp (dependency on static CUPS library is intentional)
#
testipp: testipp.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testipp.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
echo Running IPP API tests...
./testipp
#
# testi18n (dependency on static CUPS library is intentional)
#
testi18n: testi18n.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testi18n.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
echo Running internationalization API tests...
./testi18n
#
# testlang (dependency on static CUPS library is intentional)
#
testlang: testlang.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testlang.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
echo Creating locale directory structure...
$(RM) -r locale
for po in ../locale/cups_*.po; do \
lang=`basename $$po .po | sed -e '1,$$s/^cups_//'`; \
$(MKDIR) locale/$$lang; \
$(LN) ../../$$po locale/$$lang; \
done
echo Running language API tests...
LOCALEDIR=locale ./testlang
#
# testoptions (dependency on static CUPS library is intentional)
#
testoptions: testoptions.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testoptions.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
echo Running option API tests...
./testoptions
#
# testppd (dependency on static CUPS library is intentional)
#
testppd: testppd.o $(LIBCUPSSTATIC) test.ppd test2.ppd
echo Linking $@...
$(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testppd.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
echo Running PPD API tests...
./testppd
#
# testpwg (dependency on static CUPS library is intentional)
#
testpwg: testpwg.o $(LIBCUPSSTATIC) test.ppd
echo Linking $@...
$(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testpwg.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
echo Running PWG API tests...
./testpwg test.ppd
#
# testraster (dependency on static CUPS library is intentional)
#
testraster: testraster.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testraster.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
echo Running raster API tests...
./testraster
#
# testsnmp (dependency on static CUPS library is intentional)
#
testsnmp: testsnmp.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ALL_LDFLAGS) -o $@ testsnmp.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
#
# testthreads (dependency on static CUPS library is intentional)
#
testthreads: testthreads.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ALL_LDFLAGS) -o $@ testthreads.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
#
# tlscheck (dependency on static CUPS library is intentional)
#
tlscheck: tlscheck.o $(LIBCUPSSTATIC)
echo Linking $@...
$(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ tlscheck.o $(LINKCUPSSTATIC)
$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
#
# Automatic API help files...
#
apihelp:
echo Generating CUPS API help files...
$(RM) cupspm.xml
codedoc --section "Programming" --body cupspm.md \
cupspm.xml \
auth.c cups.h dest*.c encode.c http.h http*.c ipp.h ipp*.c \
options.c tls-darwin.c usersys.c util.c \
--coverimage cupspm.png \
--epub ../doc/help/cupspm.epub
codedoc --section "Programming" --body cupspm.md \
cupspm.xml > ../doc/help/cupspm.html
$(RM) cupspm.xml
codedoc --section "Programming" --title "Administration APIs" \
--css ../doc/cups-printable.css \
--header api-admin.header --body api-admin.shtml \
adminutil.c adminutil.h getdevices.c >../doc/help/api-admin.html
codedoc --section "Programming" --title "PPD API (DEPRECATED)" \
--css ../doc/cups-printable.css \
--header api-ppd.header --body api-ppd.shtml \
ppd.h ppd-*.c raster-interstub.c >../doc/help/api-ppd.html
codedoc --section "Programming" --title "Raster API" \
--css ../doc/cups-printable.css \
--header api-raster.header --body api-raster.shtml \
../cups/raster.h raster-stubs.c \
>../doc/help/api-raster.html
codedoc --section "Programming" \
--title "Filter and Backend Programming" \
--css ../doc/cups-printable.css \
--header api-filter.header --body api-filter.shtml \
backchannel.c backend.h backend.c sidechannel.c sidechannel.h \
>../doc/help/api-filter.html
#
# Lines of code computation...
#
sloc:
echo "libcups: \c"
sloccount $(LIBOBJS:.o=.c) 2>/dev/null | grep "Total Physical" | awk '{print $$9}'
echo "libcupsimage: \c"
sloccount $(IMAGEOBJS:.o=.c) 2>/dev/null | grep "Total Physical" | awk '{print $$9}'
#
# Dependencies...
#
include Dependencies
tls.o: tls-darwin.c tls-gnutls.c tls-sspi.c