ifeq ($(SRCDIR),) updir = $(shell echo $(dir $(1)) | sed 's/.$$//') SRCDIR := $(call updir,$(CURDIR)) BLDDIR := $(SRCDIR) endif SUBDIR := src include $(BLDDIR)/config.mk default: all SUBDIRS = ifeq ($(ENABLE_CPLUSPLUS),yes) SUBDIRS += cpp endif TARGET_LIBRARY_NAMES := libxmlrpc libxmlrpc_server # We cannot build libxmlrpc_server_abyss if we can't also build Abyss, # because we need libxmlrpc_abyss in order to build the proper runtime # dependencies into libxmlrpc_server_abyss. ifeq ($(ENABLE_ABYSS_SERVER),yes) TARGET_LIBRARY_NAMES += libxmlrpc_server_abyss endif ifeq ($(MUST_BUILD_CLIENT),yes) TARGET_LIBRARY_NAMES += libxmlrpc_client endif ifeq ($(ENABLE_CGI_SERVER),yes) TARGET_LIBRARY_NAMES += libxmlrpc_server_cgi endif STATIC_LIBRARIES_TO_INSTALL = $(TARGET_STATIC_LIBRARIES) SHARED_LIBS_TO_BUILD := $(TARGET_LIBRARY_NAMES) SHARED_LIBS_TO_INSTALL := $(TARGET_LIBRARY_NAMES) # TRANSPORT_MODS is the list of modules that have to go into the client # library to provide the client XML transport functions. # TRANSPORT_LIBDEP is linker -l options to declare what libraries contain # things to which the transport objects refer. (like LIBxxx_LIBDEP -- # see below) TRANSPORT_MODS = TRANSPORT_LIBDEP = TRANSPORT_INCLUDES = ifeq ($(MUST_BUILD_WININET_CLIENT),yes) TRANSPORT_MODS += $(BLDDIR)/lib/wininet_transport/xmlrpc_wininet_transport TRANSPORT_LIBDEP += $(shell wininet-config --libs) TRANSPORT_INCLUDES += -Isrcdir/lib/wininet_transport endif ifeq ($(MUST_BUILD_CURL_CLIENT),yes) TRANSPORT_MODS += $(BLDDIR)/lib/curl_transport/xmlrpc_curl_transport TRANSPORT_MODS += $(BLDDIR)/lib/curl_transport/curltransaction TRANSPORT_MODS += $(BLDDIR)/lib/curl_transport/curlmulti TRANSPORT_LIBDEP += $(shell curl-config --libs) TRANSPORT_INCLUDES += -Isrcdir/lib/curl_transport endif ifeq ($(MUST_BUILD_LIBWWW_CLIENT),yes) TRANSPORT_MODS += $(BLDDIR)/lib/libwww_transport/xmlrpc_libwww_transport TRANSPORT_LIBDEP += $(shell libwww-config --libs) TRANSPORT_INCLUDES += -Isrcdir/lib/libwww_transport endif ifeq ($(ENABLE_LIBXML2_BACKEND),yes) XMLRPC_XML_PARSER = xmlrpc_libxml2 XML_PARSER_LIBDEP = $(shell xml2-config --libs) XML_PARSER_LIBDEP_DEP = XML_PKGCONFIG_REQ = libxml-2.0 else XMLRPC_XML_PARSER = xmlrpc_expat XML_PARSER_LIBDEP = \ -Lblddir/lib/expat/xmlparse -lxmlrpc_xmlparse \ -Lblddir/lib/expat/xmltok -lxmlrpc_xmltok XML_PARSER_LIBDEP_DEP = $(LIBXMLRPC_XMLPARSE) $(LIBXMLRPC_XMLTOK) XML_PKGCONFIG_REQ = xmlrpc_expat endif # LIBxxx_OBJS is the list of object files that make up library libxxx. LIBXMLRPC_MODS = \ base_global \ double \ json \ parse_datetime \ parse_value \ resource \ trace \ version \ xmlrpc_data \ xmlrpc_datetime \ xmlrpc_string \ xmlrpc_array \ xmlrpc_struct \ xmlrpc_build \ xmlrpc_decompose \ $(XMLRPC_XML_PARSER) \ xmlrpc_parse \ xmlrpc_serialize \ xmlrpc_authcookie \ LIBXMLRPC_CLIENT_MODS = xmlrpc_client xmlrpc_client_global xmlrpc_server_info LIBXMLRPC_SERVER_MODS = registry method system_method LIBXMLRPC_SERVER_ABYSS_MODS = xmlrpc_server_abyss abyss_handler LIBXMLRPC_SERVER_CGI_MODS = xmlrpc_server_cgi TARGET_MODS = \ $(LIBXMLRPC_MODS) \ $(LIBXMLRPC_SERVER_MODS) \ $(LIBXMLRPC_SERVER_ABYSS_MODS) \ $(LIBXMLRPC_SERVER_CGI_MODS) \ $(LIBXMLRPC_CLIENT_MODS) \ PKGCONFIG_FILES_TO_INSTALL := \ xmlrpc.pc \ xmlrpc_client.pc \ xmlrpc_server.pc \ xmlrpc_server_abyss.pc \ xmlrpc_server_cgi.pc \ OMIT_XMLRPC_LIB_RULE=Y MAJ=3 # Major number of shared libraries in this directory include $(SRCDIR)/common.mk # This 'common.mk' dependency makes sure the symlinks get built before # this make file is used for anything. $(SRCDIR)/common.mk: srcdir blddir # TARGET_STATIC_LIBRARIES, etc. are set by common.mk, based on # TARGET_LIBRARY_NAMES. all: \ $(TARGET_STATIC_LIBRARIES) \ $(TARGET_SHARED_LIBRARIES) \ $(TARGET_SHARED_LE_LIBS) \ $(PKGCONFIG_FILES_TO_INSTALL) \ $(SUBDIRS:%=%/all) \ # Extra dependencies to make parallel make work in spite of all the submakes # (See top level make file for details) cpp/all: $(TARGET_SHARED_LE_LIBS) ifeq ($MUST_BUILD_CLIENT),yes) cpp/all: $(BLDDIR)/transport_config.h endif #----------------------------------------------------------------------------- # RULES TO LINK LIBRARIES #----------------------------------------------------------------------------- # Rules for these are in common.mk, courtesy of TARGET_LIBRARY_NAMES: # shlibfn generates e.g. libxmlrpc.so.3.1 # shliblefn generates e.g. libxmlrpc.so LIBXMLRPC = $(call shlibfn, libxmlrpc) $(LIBXMLRPC): $(LIBXMLRPC_MODS:%=%.osh) \ $(LIBXMLRPC_UTIL) \ $(XML_PARSER_LIBDEP_DEP) $(LIBXMLRPC): LIBOBJECTS = $(LIBXMLRPC_MODS:%=%.osh) $(LIBXMLRPC): LIBDEP = \ $(LIBXMLRPC_UTIL_LIBDEP) \ $(XML_PARSER_LIBDEP) LIBXMLRPC_SERVER = $(call shlibfn, libxmlrpc_server) $(LIBXMLRPC_SERVER): \ $(LIBXMLRPC_SERVER_MODS:%=%.osh) \ $(LIBXMLRPC_UTIL) \ $(call shliblefn, libxmlrpc) $(LIBXMLRPC_SERVER): LIBOBJECTS = $(LIBXMLRPC_SERVER_MODS:%=%.osh) $(LIBXMLRPC_SERVER): LIBDEP = \ -L. -lxmlrpc $(XML_PARSER_LIBDEP) $(LIBXMLRPC_UTIL_LIBDEP) LIBXMLRPC_SERVER_ABYSS = $(call shlibfn, libxmlrpc_server_abyss) $(LIBXMLRPC_SERVER_ABYSS): \ $(LIBXMLRPC_SERVER_ABYSS_MODS:%=%.osh) \ $(LIBXMLRPC_UTIL) \ $(LIBXMLRPC_ABYSS) \ $(call shliblefn, libxmlrpc_server) \ $(call shliblefn, libxmlrpc) $(LIBXMLRPC_SERVER_ABYSS): LIBOBJECTS = $(LIBXMLRPC_SERVER_ABYSS_MODS:%=%.osh) $(LIBXMLRPC_SERVER_ABYSS): LIBDEP = \ -L. -lxmlrpc_server \ -L$(LIBXMLRPC_ABYSS_DIR) -lxmlrpc_abyss \ -L. -lxmlrpc $(XML_PARSER_LIBDEP) $(LIBXMLRPC_UTIL_LIBDEP) ifeq ($(MSVCRT),yes) $(LIBXMLRPC_SERVER_ABYSS): LIBDEP += -lws2_32 -lwsock32 endif LIBXMLRPC_SERVER_CGI = $(call shlibfn, libxmlrpc_server_cgi) $(LIBXMLRPC_SERVER_CGI): \ $(LIBXMLRPC_SERVER_CGI_MODS:%=%.osh) \ $(LIBXMRPC_UTIL) \ $(call shliblefn, libxmlrpc_server) \ $(call shliblefn, libxmlrpc) $(LIBXMLRPC_SERVER_CGI): LIBOBJECTS = $(LIBXMLRPC_SERVER_CGI_MODS:%=%.osh) $(LIBXMLRPC_SERVER_CGI): LIBDEP = \ -L. -lxmlrpc_server \ -L. -lxmlrpc $(XML_PARSER_LIBDEP) $(LIBXMLRPC_UTIL_LIBDEP) LIBXMLRPC_CLIENT = $(call shlibfn, libxmlrpc_client) $(LIBXMLRPC_CLIENT): \ $(LIBXMLRPC_CLIENT_MODS:%=%.osh) \ $(TRANSPORT_MODS:%=%.osh) \ $(LIBXMLRPC_UTIL) \ $(call shliblefn, libxmlrpc) $(LIBXMLRPC_CLIENT): LIBOBJECTS = \ $(LIBXMLRPC_CLIENT_MODS:%=%.osh) \ $(TRANSPORT_MODS:%=%.osh) # We try to get Xmlrpc-c directories early in the link library search # path to avert problems with other versions of Xmlrpc-c being in more # general directories (such as /usr/local/lib) that are added to the # search path by curl-config, etc. That's why we separate the -L from # the corresponding -l. # # Note that in a properly configured system, curl-config, etc. do not # generate -L options for general directories. LIBXMLRPC_CLIENT_LIBDEP = \ -Lblddir/src -Lblddir/lib/libutil \ -lxmlrpc -lxmlrpc_util \ $(XML_PARSER_LIBDEP) \ $(TRANSPORT_LIBDEP) \ $(LIBXMLRPC_CLIENT): LIBDEP = \ $(LIBXMLRPC_CLIENT_LIBDEP) \ $(SOCKETLIBOPT) \ $(THREAD_LIBS) \ libxmlrpc.a: $(LIBXMLRPC_MODS:%=%.o) libxmlrpc.a: LIBOBJECTS = $(LIBXMLRPC_MODS:%=%.o) libxmlrpc_server.a: $(LIBXMLRPC_SERVER_MODS:%=%.o) libxmlrpc_server.a: LIBOBJECTS = $(LIBXMLRPC_SERVER_MODS:%=%.o) libxmlrpc_server_abyss.a: $(LIBXMLRPC_SERVER_ABYSS_MODS:%=%.o) libxmlrpc_server_abyss.a: LIBOBJECTS=$(LIBXMLRPC_SERVER_ABYSS_MODS:%=%.o) libxmlrpc_server_cgi.a: $(LIBXMLRPC_SERVER_CGI_MODS:%=%.o) libxmlrpc_server_cgi.a: LIBOBJECTS=$(LIBXMLRPC_SERVER_CGI_MODS:%=%.o) libxmlrpc_client.a: $(LIBXMLRPC_CLIENT_MODS:%=%.o) $(TRANSPORT_MODS:%=%.o) libxmlrpc_client.a: LIBOBJECTS = \ $(LIBXMLRPC_CLIENT_MODS:%=%.o) \ $(TRANSPORT_MODS:%=%.o) #----------------------------------------------------------------------------- # RULES TO COMPILE OBJECT MODULES FOR LIBRARIES #----------------------------------------------------------------------------- # Rules for these are in common.mk, courtesy of TARGET_MODS: BASIC_INCLUDES = \ -Iblddir \ -Iblddir/include \ -Isrcdir/include \ -Isrcdir/lib/util/include \ ifeq ($(ENABLE_LIBXML2_BACKEND),yes) LIBXML_INCLUDES = $(shell xml2-config --cflags) else LIBXML_INCLUDES = -Isrcdir/lib/expat/xmlparse endif $(LIBXMLRPC_MODS:%=%.o) \ $(LIBXMLRPC_MODS:%=%.osh): \ INCLUDES = $(BASIC_INCLUDES) $(LIBXML_INCLUDES) $(LIBXMLRPC_CLIENT_MODS:%=%.o) \ $(LIBXMLRPC_CLIENT_MODS:%=%.osh): \ INCLUDES = $(BASIC_INCLUDES) $(TRANSPORT_INCLUDES) $(LIBXMLRPC_SERVER_MODS:%=%.o) \ $(LIBXMLRPC_SERVER_MODS:%=%.osh): \ INCLUDES = $(BASIC_INCLUDES) $(LIBXMLRPC_SERVER_ABYSS_MODS:%=%.o) \ $(LIBXMLRPC_SERVER_ABYSS_MODS:%=%.osh): \ INCLUDES = $(BASIC_INCLUDES) -Isrcdir/lib/abyss/src $(LIBXMLRPC_SERVER_CGI_MODS:%=%.o) \ $(LIBXMLRPC_SERVER_CGI_MODS:%=%.osh): \ INCLUDES = $(BASIC_INCLUDES) #----------------------------------------------------------------------------- # RULES TO MAKE CFLAGS/LDFLAGS FILES # # These are for builds in other directories of things that use libraries in # this directory. E.g. when you build libxmlrpc_client++, it depends upon # libxmlrpc_client from this directory. So the link of libxmlrpc_client++ # must specify a dependency upon libxmlrpc_client and any library upon which # libxmlrpc_client depends, so the link command for libxmlrpc_client++ # should include $(shell cat libxmlrpc_client.ldflags). # # Note that some systems don't need this because there is information in # libxmlrpc_client that tells libxmlrpc_client's dependencies, so you need # only find libxmlrpc_client to generate libxmlrpc_client++. #----------------------------------------------------------------------------- libxmlrpc_client.cflags: echo "$(TRANSPORT_INCLUDES)" >$@ libxmlrpc_client.ldflags: echo "-Lblddir/src -lxmlrpc_client $(LIBXMLRPC_CLIENT_LIBDEP)" >$@ #----------------------------------------------------------------------------- # RULES TO MAKE PKGCONFIG FILES # # (These are files used by the 'pkg-config' program to get information about # using the libraries we build) #----------------------------------------------------------------------------- xmlrpc.pc: rm -f $@ @echo "Echoes to '$@' suppressed here ..." @echo "Name: xmlrpc" >>$@ @echo "Description: Xmlrpc-c basic XML-RPC library" >>$@ @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ @echo >>$@ @echo "Requires: xmlrpc_util $(XML_PKGCONFIG_REQ)" >>$@ @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc" >>$@ @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ xmlrpc_client.pc: rm -f $@ @echo "Echoes to '$@' suppressed here ..." @echo "Name: xmlrpc_client" >>$@ @echo "Description: Xmlrpc-c XML-RPC client library" >>$@ @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ @echo >>$@ @echo "Requires: xmlrpc xmlrpc_util" >>$@ @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_client" >>$@ @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ xmlrpc_server.pc: rm -f $@ @echo "Echoes to '$@' suppressed here ..." @echo "Name: xmlrpc_server" >>$@ @echo "Description: Xmlrpc-c XML-RPC server library" >>$@ @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ @echo >>$@ @echo "Requires: xmlrpc xmlrpc_util" >>$@ @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_server" >>$@ @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ xmlrpc_server_abyss.pc: rm -f $@ @echo "Echoes to '$@' suppressed here ..." @echo "Name: xmlrpc_server_abyss" >>$@ @echo "Description: Xmlrpc-c Abyss XML-RPC server library" >>$@ @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ @echo >>$@ @echo "Requires: xmlrpc xmlrpc_server xmlrpc_abyss xmlrpc_util" >>$@ @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_server_abyss" >>$@ @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ xmlrpc_server_cgi.pc: rm -f $@ @echo "Echoes to '$@' suppressed here ..." @echo "Name: xmlrpc_server_cgi" >>$@ @echo "Description: Xmlrpc-c CGI XML-RPC server library" >>$@ @echo "Version: $(XMLRPC_VERSION_STRING)" >>$@ @echo >>$@ @echo "Requires: xmlrpc xmlrpc_server xmlrpc_util" >>$@ @echo "Libs: -L$(LIBDESTDIR) -lxmlrpc_server_cgi" >>$@ @echo "Cflags: -I$(HEADERDESTDIR)" >>$@ .PHONY: check check: .PHONY: install install: install-common $(SUBDIRS:%=%/install) .PHONY: uninstall uninstall: uninstall-common $(SUBDIRS:%=%/uninstall) .PHONY: clean clean-local distclean distclean-local clean: $(SUBDIRS:%=%/clean) clean-common clean-local clean-local: distclean: $(SUBDIRS:%=%/distclean) \ clean-common \ clean-local \ distclean-local \ distclean-common \ distclean-local: rm -f *.cflags *.ldflags .PHONY: dep dep: $(SUBDIRS:%=%/dep) $(BLDDIR)/transport_config.h dep-common dep-common: INCLUDES = $(BASIC_INCLUDES) $(TRANSPORT_INCLUDES) $(LIBXML_INCLUDES) xmlrpc_client.o xmlrpc_client.osh: $(BLDDIR)/transport_config.h xmlrpc_client.o xmlrpc_client.osh: $(BLDDIR)/version.h registry.o registry.osh: $(BLDDIR)/version.h version.o version.osh: $(BLDDIR)/version.h include depend.mk