]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - ppdc/Makefile
Add support for cross-compilation (Issue #4897)
[thirdparty/cups.git] / ppdc / Makefile
index 1e6974709f09c9939ca1389d844fc7c289f00820..fb35c7fd677127d4f3d46b6c53a7f79021d6be0f 100644 (file)
@@ -1,16 +1,14 @@
 #
-# "$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/".
 #
 
 #
@@ -24,7 +22,7 @@ include ../Makedefs
 # Object files...
 #
 
-PPDCOBJS       = \
+LIBOBJS =      \
                ppdc-array.o \
                ppdc-attr.o \
                ppdc-catalog.o \
@@ -44,26 +42,34 @@ PPDCOBJS    = \
                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...
@@ -72,6 +78,20 @@ TARGETS              = \
 all:           $(TARGETS)
 
 
+#
+# Make library targets...
+#
+
+libs:          $(LIBTARGETS)
+
+
+#
+# Make unit tests...
+#
+
+unittests:     $(UNITTARGETS)
+
+
 #
 # Clean everything...
 #
@@ -79,9 +99,10 @@ all:         $(TARGETS)
 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
 
 
 #
@@ -89,24 +110,83 @@ clean:
 #
 
 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
 
 
 #
@@ -114,38 +194,58 @@ install:
 #
 
 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
@@ -155,18 +255,36 @@ ppdc-static:              ppdc.o libppdc.a  ../cups/libcups.a foo.drv foo-fr.po
 # 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
 
 
 #
@@ -182,29 +300,74 @@ ppdmerge:                 ppdmerge.o ../cups/$(LIBCUPS)
 # 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