#
-# "$Id$"
+# Makefile for the CUPS PPD Compiler.
#
-# Makefile for the CUPS PPD Compiler.
+# Copyright 2007-2017 by Apple Inc.
+# Copyright 2002-2006 by Easy Software Products.
#
-# Copyright 2007-2008 by Apple Inc.
-# Copyright 2002-2006 by Easy Software Products.
-#
-# These coded instructions, statements, and computer programs are the
-# property of Apple Inc. and are protected by Federal copyright
-# law. Distribution and use rights are outlined in the file "LICENSE.txt"
-# which should have been included with this file. If this file is
-# file is missing or damaged, see the license at "http://www.cups.org/".
+# These coded instructions, statements, and computer programs are the
+# property of Apple Inc. and are protected by Federal copyright
+# law. Distribution and use rights are outlined in the file "LICENSE.txt"
+# which should have been included with this file. If this file is
+# missing or damaged, see the license at "http://www.cups.org/".
#
#
# Object files...
#
-PPDCOBJS = \
+LIBOBJS = \
ppdc-array.o \
ppdc-attr.o \
ppdc-catalog.o \
ppdc-source.o \
ppdc-string.o \
ppdc-variable.o
-
-OBJS = \
- drv.o \
+OBJS = \
+ $(LIBOBJS) \
+ genstrings.o \
ppdc.o \
ppdhtml.o \
ppdi.o \
ppdmerge.o \
ppdpo.o \
- $(PPDCOBJS)
-
-TARGETS = \
- libppdc.a \
- drv \
+ testcatalog.o
+LIBTARGETS = \
+ $(LIBCUPSPPDC) \
+ libcupsppdc.a
+UNITTARGETS = \
ppdc-static \
+ ppdi-static \
+ testcatalog
+EXECTARGETS = \
ppdc \
ppdhtml \
ppdi \
ppdmerge \
ppdpo
+TARGETS = \
+ $(LIBTARGETS) \
+ $(EXECTARGETS) \
+ $(LOCALTARGET)
+
#
# Make everything...
all: $(TARGETS)
+#
+# Make library targets...
+#
+
+libs: $(LIBTARGETS)
+
+
+#
+# Make unit tests...
+#
+
+unittests: $(UNITTARGETS)
+
+
#
# Clean everything...
#
clean:
$(RM) $(OBJS) core
$(RM) *.bak *.bck core.*
- $(RM) $(TARGETS)
- $(RM) -r ppd
- $(RM) test.drv
+ $(RM) $(TARGETS) $(UNITTARGETS) genstrings
+ $(RM) -r ppd ppd2
+ $(RM) sample-import.drv sample.c test.drv
+ $(RM) libcupsppdc.so libcupsppdc.dylib
#
#
depend:
- makedepend -Y -I.. -fDependencies $(OBJS:.o=.cxx) >/dev/null 2>&1
+ $(CXX) -MM $(ALL_CXXFLAGS) $(OBJS:.o=.cxx) >Dependencies
+
+
+#
+# Install all targets...
+#
+
+install: all install-data install-headers install-libs install-exec
#
-# Install...
+# Install data files...
#
-install:
+install-data:
+ $(INSTALL_DIR) $(DATADIR)/drv
+ $(INSTALL_DATA) sample.drv $(DATADIR)/drv
+
+
+#
+# Install programs...
+#
+
+install-exec:
echo Installing PPD compiler programs...
$(INSTALL_DIR) $(BINDIR)
- $(INSTALL_BIN) ppdc $(BINDIR)
- $(INSTALL_BIN) ppdhtml $(BINDIR)
- $(INSTALL_BIN) ppdi $(BINDIR)
- $(INSTALL_BIN) ppdmerge $(BINDIR)
- $(INSTALL_BIN) ppdpo $(BINDIR)
- $(INSTALL_DIR) $(SERVERBIN)/driver
- $(INSTALL_BIN) drv $(SERVERBIN)/driver
- $(INSTALL_DIR) $(DATADIR)/drv
+ for file in $(EXECTARGETS); do \
+ $(INSTALL_BIN) $$file $(BINDIR); \
+ done
+ if test "x$(SYMROOT)" != "x"; then \
+ $(INSTALL_DIR) $(SYMROOT); \
+ for file in $(EXECTARGETS); do \
+ cp $$file $(SYMROOT); \
+ dsymutil $(SYMROOT)/$$file; \
+ done \
+ fi
+
+
+#
+# Install headers...
+#
+
+install-headers:
+ if test "x$(privateinclude)" != x; then \
+ echo Installing private header files into $(PRIVATEINCLUDE)...; \
+ $(INSTALL_DIR) -m 755 $(PRIVATEINCLUDE); \
+ $(INSTALL_DATA) ppdc.h $(PRIVATEINCLUDE); \
+ fi
+
+
+#
+# Install libraries...
+#
+
+install-libs: $(INSTALLSTATIC)
+ echo Installing libraries in $(LIBDIR)...
+ $(INSTALL_DIR) -m 755 $(LIBDIR)
+ $(INSTALL_LIB) $(LIBCUPSPPDC) $(LIBDIR)
+ if test $(LIBCUPSPPDC) = "libcupsppdc.so.1"; then \
+ $(RM) $(LIBDIR)/`basename $(LIBCUPSPPDC) .1`; \
+ $(LN) $(LIBCUPSPPDC) $(LIBDIR)/`basename $(LIBCUPSPPDC) .1`; \
+ fi
+ if test $(LIBCUPSPPDC) = "libcupsppdc.1.dylib"; then \
+ $(RM) $(LIBDIR)/libcupsppdc.dylib; \
+ $(LN) $(LIBCUPSPPDC) $(LIBDIR)/libcupsppdc.dylib; \
+ fi
+ if test "x$(SYMROOT)" != "x"; then \
+ $(INSTALL_DIR) $(SYMROOT); \
+ cp $(LIBCUPSPPDC) $(SYMROOT); \
+ dsymutil $(SYMROOT)/$(LIBCUPSPPDC); \
+ fi
+
+installstatic:
+ $(INSTALL_DIR) -m 755 $(LIBDIR)
+ $(INSTALL_LIB) -m 755 libcupsppdc.a $(LIBDIR)
+ $(RANLIB) $(LIBDIR)/libcupsppdc.a
+ $(CHMOD) 555 $(LIBDIR)/libcupsppdc.a
#
#
uninstall:
- $(RM) $(BINDIR)/ppdc
- $(RM) $(BINDIR)/ppdhtml
- $(RM) $(BINDIR)/ppdi
- $(RM) $(BINDIR)/ppdmerge
- $(RM) $(BINDIR)/ppdpo
- $(RM) $(SERVERBIN)/driver/drv
- $(RMDIR) $(SERVERBIN)/driver
+ for file in $(EXECTARGETS); do \
+ $(RM) $(BINDIR)/$$file; \
+ done
+ $(RM) $(DATADIR)/drv/sample.drv
$(RMDIR) $(DATADIR)/drv
+ $(RM) $(LIBDIR)/libcupsppdc.1.dylib
+ $(RM) $(LIBDIR)/libcupsppdc.a
+ $(RM) $(LIBDIR)/libcupsppdc.dylib
+ $(RM) $(LIBDIR)/libcupsppdc.so
+ $(RM) $(LIBDIR)/libcupsppdc.so.1
+ -$(RMDIR) $(LIBDIR)
+ -if test "x$(privateinclude)" != x; then \
+ $(RM) $(PRIVATEINCLUDE)/ppdc.h; \
+ $(RMDIR) $(PRIVATEINCLUDE); \
+ fi
#
-# drv, the CUPS driver interface program to the PPD compiler.
+# Local programs (not built when cross-compiling...)
#
-drv: drv.o libppdc.a ../cups/$(LIBCUPS)
+local: genstrings
+
+
+#
+# genstrings - generate GNU gettext strings.
+#
+
+genstrings: genstrings.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC) \
+ sample.drv ../data/media.defs
echo Linking $@...
- $(CXX) $(LDFLAGS) -o $@ drv.o libppdc.a $(LIBS)
+ $(CXX) $(ARCHFLAGS) $(LDFLAGS) -o genstrings genstrings.o \
+ libcupsppdc.a ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) \
+ $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
+ echo Generating localization strings...
+ ./genstrings >sample.c
#
# ppdc, the PPD compiler.
#
-ppdc: ppdc.o libppdc.a ../cups/$(LIBCUPS)
+ppdc: ppdc.o $(LIBCUPSPPDC) ../cups/$(LIBCUPS)
echo Linking $@...
- $(CXX) $(LDFLAGS) -o $@ ppdc.o libppdc.a $(LIBS)
+ $(CXX) $(LDFLAGS) -o $@ ppdc.o -L. -lcupsppdc $(LIBS)
-ppdc-static: ppdc.o libppdc.a ../cups/libcups.a foo.drv foo-fr.po
+ppdc-static: ppdc.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC) foo.drv foo-fr.po
echo Linking $@...
- $(CXX) $(LDFLAGS) -o ppdc-static ppdc.o libppdc.a ../cups/libcups.a \
- $(LIBGSSAPI) $(SSLLIBS) $(COMMONLIBS) $(LIBZ)
+ $(CXX) $(ARCHFLAGS) $(LDFLAGS) -o ppdc-static ppdc.o libcupsppdc.a \
+ ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \
+ $(COMMONLIBS) $(LIBZ)
echo Testing PPD compiler...
./ppdc-static -l en,fr -I ../data foo.drv
./ppdc-static -l en,fr -z -I ../data foo.drv
# ppdhtml, the PPD to HTML utility.
#
-ppdhtml: ppdhtml.o libppdc.a ../cups/$(LIBCUPS)
+ppdhtml: ppdhtml.o $(LIBCUPSPPDC) ../cups/$(LIBCUPS)
echo Linking $@...
- $(CXX) $(LDFLAGS) -o $@ ppdhtml.o libppdc.a $(LIBS)
+ $(CXX) $(LDFLAGS) -o $@ ppdhtml.o -L. -lcupsppdc $(LIBS)
#
# ppdi, import PPD files.
#
-ppdi: ppdi.o libppdc.a ../cups/$(LIBCUPS)
+ppdi: ppdi.o $(LIBCUPSPPDC) ../cups/$(LIBCUPS)
echo Linking $@...
- $(CXX) $(LDFLAGS) -o $@ ppdi.o libppdc.a $(LIBS)
+ $(CXX) $(LDFLAGS) -o $@ ppdi.o -L. -lcupsppdc $(LIBS)
+
+
+ppdi-static: ppdc-static ppdi.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC)
+ echo Linking $@...
+ $(CXX) $(ARCHFLAGS) $(LDFLAGS) -o ppdi-static ppdi.o libcupsppdc.a \
+ ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \
+ $(COMMONLIBS) $(LIBZ)
+ echo Testing PPD importer...
+ $(RM) -r ppd ppd2 sample-import.drv
+ ./ppdc-static -l en -I ../data sample.drv
+ ./ppdi-static -I ../data -o sample-import.drv ppd/*
+ ./ppdc-static -l en -I ../data -d ppd2 sample-import.drv
+ if diff -r ppd ppd2 >/dev/null; then \
+ echo PPD import OK; \
+ else \
+ echo PPD import FAILED; \
+ exit 1; \
+ fi
#
# ppdpo, create message catalog files.
#
-ppdpo: ppdpo.o libppdc.a ../cups/$(LIBCUPS)
+ppdpo: ppdpo.o $(LIBCUPSPPDC) ../cups/$(LIBCUPS)
echo Linking $@...
- $(CXX) $(LDFLAGS) -o $@ ppdpo.o libppdc.a $(LIBS)
+ $(CXX) $(LDFLAGS) -o $@ ppdpo.o -L. -lcupsppdc $(LIBS)
#
-# libppdc.a, the PPD compiler library...
+# testcatalog, test ppdcCatalog class.
#
-libppdc.a: $(PPDCOBJS)
- echo Creating $@...
- $(RM) $@
- $(AR) $(ARFLAGS) $@ $(PPDCOBJS)
- $(RANLIB) $@
+testcatalog: testcatalog.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC)
+ echo Linking $@...
+ $(CXX) $(LDFLAGS) -o $@ testcatalog.o libcupsppdc.a \
+ ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \
+ $(COMMONLIBS) $(LIBZ)
#
-# Include dependencies...
+# libcupsppdc.so.1
#
-include Dependencies
+libcupsppdc.so.1: $(LIBOBJS) ../cups/$(LIBCUPS)
+ echo Linking $@...
+ $(DSOXX) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS) $(LINKCUPS)
+ $(RM) `basename $@ .1`
+ $(LN) $@ `basename $@ .1`
+
+
+#
+# libcupsppdc.1.dylib
+#
+
+libcupsppdc.1.dylib: $(LIBOBJS) ../cups/$(LIBCUPS)
+ echo Creating export list for $@...
+ nm -gm $(LIBOBJS) | grep "__text" | grep -v weak | awk '{print $$NF}' | sort >t.exp
+ echo Linking $@...
+ $(DSOXX) $(ARCHFLAGS) $(DSOFLAGS) -o $@ \
+ -install_name $(libdir)/$@ \
+ -current_version 1.0.0 \
+ -compatibility_version 1.0.0 \
+ -exported_symbols_list t.exp \
+ $(LIBOBJS) $(LINKCUPS) $(COMMONLIBS)
+ $(RM) libcupsppdc.dylib t.exp
+ $(LN) $@ libcupsppdc.dylib
+
+
+#
+# libcupsppdc.la
+#
+
+libcupsppdc.la: $(LIBOBJS) ../cups/$(LIBCUPS)
+ echo Linking $@...
+ $(CC) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) -rpath $(LIBDIR) \
+ -version-info 1:0 $(LINKCUPS)
+
+
+#
+# libcupsppdc.a
+#
+
+libcupsppdc.a: $(LIBOBJS)
+ echo Archiving $@...
+ $(RM) $@
+ $(AR) $(ARFLAGS) $@ $(LIBOBJS)
+ $(RANLIB) $@
#
-# End of "$Id$".
+# Include dependencies...
#
+
+include Dependencies