Add simple, experimental Makefile.config support.

* GTK-specific features, such as RSVG and librosprite, can be set to one of
   three options; YES, NO or AUTO.  AUTO will attempt to auto-detect its
   availability and enable it if it is available.
 * Haru PDF export/printing is enabled via this also.  It lacks a pkg-config
   file and works on RISC OS too, and thus has no auto-detection.  Disabling
   it disables the PDF-related menu entries in nsgtk.

svn path=/trunk/netsurf/; revision=4747
This commit is contained in:
Rob Kendrick 2008-07-26 17:08:23 +00:00
parent 35d3d6d0bb
commit 789ab037d1
8 changed files with 107 additions and 19 deletions

View File

@ -34,7 +34,7 @@ all: all-program
# In both cases HOST make variable is empty and we recover from that by
# assuming we're building on RISC OS.
# In case you don't see anything printed (including the warning), you
# have an update to date RISC OS build sytem. ;-)
# have an update to date RISC OS build system. ;-)
HOST := $(shell uname -s)
ifeq ($(HOST),)
HOST := riscos
@ -138,6 +138,8 @@ endif
OBJROOT := build-$(HOST)-$(TARGET)$(SUBTARGET)
include Makefile.config
ifeq ($(HOST),riscos)
LDFLAGS := -Xlinker -symbols=$(OBJROOT)/sym -lxml2 -lz -lm -lcurl -lssl -lcrypto -lmng -ljpeg \
-lcares
@ -151,29 +153,68 @@ else
LDFLAGS := $(shell $(PKG_CONFIG) --libs libxml-2.0 libcurl openssl)
endif
# Common libraries without pkgconfig support:
LDFLAGS += -lz -lm -lmng -ljpeg -lhpdf -lpng
LDFLAGS += -lz -lm -lmng -ljpeg -lpng
ifeq ($(NETSURF_USE_HARU_PDF),YES)
LDFLAGS += -lhpdf
CFLAGS += -DWITH_PDF_EXPORT
endif
endif
ifeq ($(TARGET),gtk)
# Building for GTK, we need the GTK flags
FEATURE_CFLAGS :=
FEATURE_LDFLAGS :=
# 1: Feature name (ie, NETSURF_USE_RSVG -> RSVG)
# 2: pkg-config required modules for feature
# 3: Human-readable name for the feature
define pkg_config_find_and_add
ifneq ($$(NETSURF_USE_$(1)),NO)
NETSURF_FEATURE_$(1)_AVAILABLE := $$(shell pkg-config --exists $(2) && echo yes)
ifeq ($$(NETSURF_USE_$(1)),AUTO)
ifeq ($$(NETSURF_FEATURE_$(1)_AVAILABLE),yes)
NETSURF_USE_$(1) := YES
endif
endif
ifeq ($$(NETSURF_USE_$(1)),YES)
ifeq ($$(NETSURF_FEATURE_$(1)_AVAILABLE),yes)
FEATURE_CFLAGS += $$(shell pkg-config --cflags $(2)) $$(NETSURF_FEATURE_$(1)_CFLAGS)
FEATURE_LDFLAGS += $$(shell pkg-config --libs $(2)) $$(NETSURF_FEATURE_$(1)_LDFLAGS)
$$(info Auto-configuration enabled $(3) ($(2)).)
else
$$(error Unable to find library for: $$(3) ($(2))
endif
endif
endif
endef
# define additional CFLAGS and LDFLAGS requirements for pkg-configed libs here
NETSURF_FEATURE_RSVG_CFLAGS := -DWITH_RSVG
NETSURF_FEATURE_ROSPRITE_CFLAGS := -DWITH_NSSPRITE
# add a line similar to below for each optional pkg-configed lib here
$(eval $(call pkg_config_find_and_add,RSVG,librsvg-2.0,SVG rendering))
$(eval $(call pkg_config_find_and_add,ROSPRITE,librosprite,RISC OS sprite rendering))
GTKCFLAGS := -std=c99 -Dgtk -Dnsgtk \
-DGTK_DISABLE_DEPRECATED \
-D_BSD_SOURCE \
-D_XOPEN_SOURCE=600 \
-D_POSIX_C_SOURCE=200112L \
-D_NETBSD_SOURCE \
$(WARNFLAGS) -I. -I../../libsprite/trunk/ -g $(OPT2FLAGS) \
$(shell $(PKG_CONFIG) --cflags libglade-2.0 gtk+-2.0 librsvg-2.0) \
$(shell $(PKG_CONFIG) --cflags librosprite) \
$(WARNFLAGS) -I. -g $(OPT2FLAGS) \
$(shell $(PKG_CONFIG) --cflags libglade-2.0 gtk+-2.0) \
$(shell xml2-config --cflags)
GTKCFLAGS += $(FEATURE_CFLAGS)
GTKLDFLAGS := $(shell $(PKG_CONFIG) --cflags --libs libglade-2.0 gtk+-2.0 gthread-2.0 gmodule-2.0 lcms)
GTKLDFLAGS += $(FEATURE_LDFLAGS)
#GTKLDFLAGS := $(shell $(PKG_CONFIG) --cflags --libs libglade-2.0 gtk+-2.0 gthread-2.0 gmodule-2.0 librosprite)
GTKLDFLAGS := $(shell $(PKG_CONFIG) --cflags --libs libglade-2.0 gtk+-2.0 gthread-2.0 gmodule-2.0 librsvg-2.0 librosprite)
#CFLAGS += $(GTKCFLAGS) -g
#LDFLAGS += $(GTKLDFLAGS) $(shell $(PKG_CONFIG) --libs lcms) -lsvgtiny
CFLAGS += $(GTKCFLAGS)
LDFLAGS += $(GTKLDFLAGS) $(shell $(PKG_CONFIG) --libs lcms)
LDFLAGS += $(GTKLDFLAGS)
ifeq ($(HOST),Windows_NT)
CFLAGS += -U__STRICT_ANSI__

21
Makefile.config Normal file
View File

@ -0,0 +1,21 @@
#
# NetSurf build configuration
#
# Some of these options support an 'AUTO' option, as well as YES and NO. If
# AUTO is set, the Makefile will attempt to detect if that feature is available
# Use libharu to enable PDF export and GTK printing support. There is no
# auto-detection available for this, as it does not have a pkg-config file.
NETSURF_USE_HARU_PDF=YES
# The following options are GTK-specific
ifeq ($(TARGET),gtk)
# Use librsvg in conjunction with Cairo to render SVG images
NETSURF_USE_RSVG=AUTO
# Use James Shaw's librosprite for rendering RISC OS Sprites
NETSURF_USE_ROSPRITE=AUTO
endif

View File

@ -20,6 +20,7 @@
* Output-in-pages implementation
*/
#ifdef WITH_PDF_EXPORT
#include "desktop/print.h"
#include "desktop/printer.h"
@ -278,3 +279,5 @@ struct print_settings *print_make_settings(print_configuration configuration)
return settings;
}
#endif /* WITH_PDF_EXPORT */

View File

@ -23,7 +23,9 @@
* plotters, printer) are here.
* Most of the plotters have been copied from the gtk_plotters.c file.
*/
#include "utils/config.h"
#ifdef WITH_PDF_EXPORT
#include <math.h>
#include <gdk/gdk.h>
@ -571,3 +573,5 @@ void gtk_print_signal_end_print(GtkPrintOperation *operation,
LOG(("End print"));
print_cleanup(content_to_print, &gtk_printer);
}
#endif /* WITH_PDF_EXPORT */

View File

@ -189,9 +189,11 @@ static struct menu_events menu_events[] = {
MENUEVENT(new_window),
MENUEVENT(open_location),
MENUEVENT(open_file),
#ifdef WITH_PDF_EXPORT
MENUEVENT(export_pdf),
MENUEVENT(print),
MENUEVENT(print_preview),
#endif
MENUEVENT(close_window),
MENUEVENT(quit),
@ -478,6 +480,8 @@ MENUHANDLER(open_file)
return TRUE;
}
#ifdef WITH_PDF_EXPORT
MENUHANDLER(export_pdf){
GtkWidget *save_dialog;
@ -558,6 +562,8 @@ MENUHANDLER(print_preview){
return TRUE;
}
#endif /* WITH_PDF_EXPORT */
MENUHANDLER(close_window)
{
struct gtk_scaffolding *gw = (struct gtk_scaffolding *)g;
@ -1129,8 +1135,15 @@ nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
/* hides redundant popup menu items */
GList *widgets = glade_xml_get_widget_prefix (g->popup_xml, "menupopup");
for (; widgets != NULL; widgets = widgets->next)
gtk_widget_hide (GTK_WIDGET(widgets->data));
gtk_widget_hide(GTK_WIDGET(widgets->data));
/* disable PDF-requiring menu items */
#ifndef WITH_PDF_EXPORT
gtk_widget_set_sensitive(GET_WIDGET("export_pdf"), FALSE);
gtk_widget_set_sensitive(GET_WIDGET("print"), FALSE);
gtk_widget_set_sensitive(GET_WIDGET("print_preview"), FALSE);
#endif
/* finally, show the window. */
gtk_widget_show(GTK_WIDGET(g->window));

View File

@ -22,7 +22,10 @@
* The functions were written to implement the same interface as the Pango ones
* so that the usage of the latter wouldn't have to be modified.
*/
#include "utils/config.h"
#ifdef WITH_PDF_EXPORT
#define FONT_HARU_DEBUG
#include <assert.h>
@ -371,3 +374,6 @@ bool haru_nsfont_apply_style(const struct css_style *style,
return true;
}
#endif /* WITH_PDF_EXPORT */

View File

@ -22,6 +22,9 @@
* boundaries a 'fuzzy' bottom margin.
*/
#include "utils/config.h"
#ifdef WITH_PDF_EXPORT
#include <stdlib.h>
#include <string.h>
#include "hpdf.h"
@ -771,4 +774,6 @@ void pdf_page_apply_notext_clip()
#endif
}
#endif /* WITH_PDF_EXPORT */

View File

@ -75,16 +75,11 @@ char *strndup(const char *s, size_t n);
#else
/* We're likely to have a working mmap() */
#define WITH_MMAP
#if !defined(DEBUG_BUILD)
/* Use librsvg and Cairo for rendering SVG */
#define WITH_RSVG
#endif
#endif
#if defined(riscos) || defined(DEBUG_BUILD)
/* Export modules */
#define WITH_SAVE_COMPLETE
#define WITH_DRAW_EXPORT
#define WITH_PDF_EXPORT
#endif
/* Configuration sanity checks: */