2007-12-23 00:15:58 +03:00
#
# Makefile for NetSurf
#
# Copyright 2007 Daniel Silverstone <dsilvers@netsurf-browser.org>
2008-07-29 01:21:40 +04:00
# Copyright 2008 Rob Kendrick <rjek@netsurf-browser.org>
2007-12-23 00:15:58 +03:00
#
# Trivially, invoke as:
2008-03-19 07:03:40 +03:00
# make
2007-12-23 00:15:58 +03:00
# to build native, or:
2008-03-19 07:03:40 +03:00
# make TARGET=riscos
2007-12-23 00:15:58 +03:00
# to cross-build for RO.
#
2008-07-29 01:21:40 +04:00
# Look at Makefile.config for configuration options.
#
2008-03-19 06:25:05 +03:00
# Tested on unix platforms (building for GTK and cross-compiling for RO) and
# on RO (building for RO).
2007-12-23 00:15:58 +03:00
#
# To clean, invoke as above, with the 'clean' target
#
2008-03-09 20:06:45 +03:00
# To build developer Doxygen generated documentation, invoke as above,
# with the 'docs' target:
2008-03-19 07:03:40 +03:00
# make docs
2008-03-09 20:06:45 +03:00
#
2007-12-23 00:15:58 +03:00
2015-07-07 18:02:54 +03:00
.PHONY : all
2007-12-23 00:15:58 +03:00
all : all -program
# Determine host type
2008-04-08 03:13:06 +04:00
# NOTE: HOST determination on RISC OS could fail because of missing bug fixes
# in UnixLib which only got addressed in UnixLib 5 / GCCSDK 4.
2008-03-20 18:13:52 +03:00
# When you don't have 'uname' available, you will see:
# File 'uname' not found
2008-04-08 03:13:06 +04:00
# When you do and using a 'uname' compiled with a buggy UnixLib, you
# will see the following printed on screen:
2008-03-20 18:13:52 +03:00
# RISC OS
# In both cases HOST make variable is empty and we recover from that by
# assuming we're building on RISC OS.
2008-04-08 03:13:06 +04:00
# In case you don't see anything printed (including the warning), you
2008-07-29 03:16:59 +04:00
# have an up-to-date RISC OS build system. ;-)
2008-03-19 03:48:08 +03:00
HOST := $( shell uname -s)
2011-04-22 13:00:24 +04:00
# Sanitise host
# TODO: Ideally, we want the equivalent of s/[^A-Za-z0-9]/_/g here
HOST := $( subst .,_,$( subst -,_,$( subst /,_,$( HOST) ) ) )
2008-03-20 18:13:52 +03:00
i f e q ( $( HOST ) , )
2008-07-29 03:16:59 +04:00
HOST := riscos
$( warning Build platform determination failed but that's a known problem for RISC OS so we' re assuming a native RISC OS build.)
2008-03-23 03:59:09 +03:00
e l s e
2008-07-29 03:16:59 +04:00
ifeq ( $( HOST) ,RISC OS)
# Fixup uname -s returning "RISC OS"
HOST := riscos
endif
2008-03-20 18:13:52 +03:00
e n d i f
2008-03-19 03:48:08 +03:00
i f e q ( $( HOST ) , r i s c o s )
2008-07-29 03:16:59 +04:00
# Build happening on RO platform, default target is RO backend
ifeq ( $( TARGET) ,)
TARGET := riscos
endif
2014-12-21 05:01:45 +03:00
e n d i f
i f e q ( $( HOST ) , B e O S )
HOST := beos
e n d i f
i f e q ( $( HOST ) , H a i k u )
# Haiku implements the BeOS API
HOST := beos
e n d i f
i f e q ( $( HOST ) , b e o s )
2008-07-29 03:16:59 +04:00
# Build happening on BeOS platform, default target is BeOS backend
ifeq ( $( TARGET) ,)
TARGET := beos
endif
2014-09-05 19:01:44 +04:00
ifeq ( $( TARGET) ,haiku)
2016-12-22 19:04:59 +03:00
override TARGET := beos
2014-09-05 19:01:44 +04:00
endif
2014-12-21 05:01:45 +03:00
e n d i f
2011-01-23 03:20:20 +03:00
2014-12-21 05:01:45 +03:00
i f e q ( $( HOST ) , A m i g a O S )
HOST := amiga
ifeq ( $( TARGET) ,)
TARGET := amiga
2008-07-29 03:16:59 +04:00
endif
2008-06-04 00:13:34 +04:00
e n d i f
2014-12-21 05:01:45 +03:00
i f e q ( $( HOST ) , F r e e M i N T )
HOST := mint
e n d i f
i f e q ( $( HOST ) , m i n t )
ifeq ( $( TARGET) ,)
TARGET := atari
endif
e n d i f
i f e q ( $( findstring MINGW ,$ ( HOST ) ) , M I N G W )
# MSYS' uname reports the likes of "MINGW32_NT-6.0"
HOST := windows
e n d i f
i f e q ( $( HOST ) , w i n d o w s )
ifeq ( $( TARGET) ,)
TARGET := windows
endif
e n d i f
# Default target is GTK backend
i f e q ( $( TARGET ) , )
TARGET := gtk
e n d i f
2015-04-06 02:16:39 +03:00
# valid values for the TARGET
2017-05-23 13:18:45 +03:00
VLDTARGET := riscos gtk gtk3 beos amiga amigaos3 framebuffer windows atari monkey
2007-12-23 00:15:58 +03:00
2015-04-06 02:16:39 +03:00
# Check for valid TARGET
i f e q ( $( filter $ ( VLDTARGET ) ,$ ( TARGET ) ) , )
$( error Unknown TARGET " $( TARGET) " , Must be one of $( VLDTARGET) )
2008-03-22 01:40:11 +03:00
e n d i f
2015-04-07 02:08:14 +03:00
# ensure empty values for base variables
# Sub target for build
SUBTARGET =
# Resources executable target depends upon
RESOURCES =
# Messages executable target depends on
MESSAGES :=
# The filter applied to the fat (full) messages to generate split messages
MESSAGES_FILTER = any
# The languages in the fat messages to convert
MESSAGES_LANGUAGES = de en fr it nl
# The target directory for the split messages
2018-04-22 12:51:43 +03:00
MESSAGES_TARGET = resources
2015-04-07 02:08:14 +03:00
# Defaults for tools
2007-12-23 00:15:58 +03:00
PERL = perl
MKDIR = mkdir
TOUCH = touch
2015-03-22 20:39:11 +03:00
STRIP ?= strip
2019-02-15 20:53:31 +03:00
INSTALL ?= install
2013-05-02 12:24:18 +04:00
SPLIT_MESSAGES = $( PERL) utils/split-messages.pl
2007-12-23 00:15:58 +03:00
2014-09-05 19:01:44 +04:00
# build verbosity
i f e q ( $( V ) , 1 )
Q:=
e l s e
Q = @
e n d i f
VQ = @
2009-02-26 17:14:29 +03:00
# Override this only if the host compiler is called something different
2018-09-07 14:01:21 +03:00
BUILD_CC := cc
2009-02-26 17:14:29 +03:00
2007-12-23 00:15:58 +03:00
i f e q ( $( TARGET ) , r i s c o s )
2008-07-29 03:16:59 +04:00
ifeq ( $( HOST) ,riscos)
# Build for RO on RO
GCCSDK_INSTALL_ENV := <NSLibs$$ Dir>
2008-08-07 01:46:53 +04:00
CCRES := ccres
TPLEXT :=
2008-12-09 14:12:58 +03:00
MAKERUN := makerun
2012-10-07 23:40:01 +04:00
SQUEEZE := squeeze
2008-12-09 14:12:58 +03:00
RUNEXT :=
2008-07-29 03:16:59 +04:00
CC := gcc
2012-12-10 15:38:52 +04:00
CXX := g++
2008-07-29 03:16:59 +04:00
EXEEXT :=
PKG_CONFIG :=
else
# Cross-build for RO (either using GCCSDK 3.4.6 - AOF,
# either using GCCSDK 4 - ELF)
2011-01-04 00:10:15 +03:00
ifeq ( $( origin GCCSDK_INSTALL_ENV) ,undefined)
ifneq ( $( realpath /opt/netsurf/arm-unknown-riscos/env) ,)
GCCSDK_INSTALL_ENV := /opt/netsurf/arm-unknown-riscos/env
else
GCCSDK_INSTALL_ENV := /home/riscos/env
endif
endif
ifeq ( $( origin GCCSDK_INSTALL_CROSSBIN) ,undefined)
ifneq ( $( realpath /opt/netsurf/arm-unknown-riscos/cross/bin) ,)
GCCSDK_INSTALL_CROSSBIN := /opt/netsurf/arm-unknown-riscos/cross/bin
else
GCCSDK_INSTALL_CROSSBIN := /home/riscos/cross/bin
endif
endif
2008-08-07 01:46:53 +04:00
CCRES := $( GCCSDK_INSTALL_CROSSBIN) /ccres
TPLEXT := ,fec
2008-12-09 14:12:58 +03:00
MAKERUN := $( GCCSDK_INSTALL_CROSSBIN) /makerun
2012-10-07 23:40:01 +04:00
SQUEEZE := $( GCCSDK_INSTALL_CROSSBIN) /squeeze
2008-12-09 14:12:58 +03:00
RUNEXT := ,feb
2008-07-29 03:16:59 +04:00
CC := $( wildcard $( GCCSDK_INSTALL_CROSSBIN) /*gcc)
ifneq ( ,$( findstring arm-unknown-riscos-gcc,$( CC) ) )
SUBTARGET := -elf
EXEEXT := ,e1f
ELF2AIF := $( GCCSDK_INSTALL_CROSSBIN) /elf2aif
else
SUBTARGET := -aof
EXEEXT := ,ff8
endif
2012-12-10 15:38:52 +04:00
CXX := $( wildcard $( GCCSDK_INSTALL_CROSSBIN) /*g++)
2008-07-29 03:16:59 +04:00
PKG_CONFIG := $( GCCSDK_INSTALL_ENV) /ro-pkg-config
endif
2008-06-04 00:13:34 +04:00
e l s e
2008-07-29 03:16:59 +04:00
ifeq ( $( TARGET) ,beos)
# Building for BeOS/Haiku
#ifeq ($(HOST),beos)
# Build for BeOS on BeOS
GCCSDK_INSTALL_ENV := /boot/develop
CC := gcc
CXX := g++
EXEEXT :=
2014-11-15 01:30:30 +03:00
PKG_CONFIG := pkg-config
2008-07-29 03:16:59 +04:00
#endif
else
2010-01-31 03:36:02 +03:00
ifeq ( $( TARGET) ,windows)
ifneq ( $( HOST) ,windows)
# Set Mingw defaults
2012-07-24 00:12:19 +04:00
GCCSDK_INSTALL_ENV ?= /opt/netsurf/i686-w64-mingw32/env
GCCSDK_INSTALL_CROSSBIN ?= /opt/netsurf/i686-w64-mingw32/cross/bin
2010-01-31 03:36:02 +03:00
2012-07-24 00:12:19 +04:00
CC := $( wildcard $( GCCSDK_INSTALL_CROSSBIN) /*gcc)
WINDRES := $( wildcard $( GCCSDK_INSTALL_CROSSBIN) /*windres)
PKG_CONFIG := PKG_CONFIG_LIBDIR = " $( GCCSDK_INSTALL_ENV) /lib/pkgconfig " pkg-config
2011-01-23 03:20:20 +03:00
else
# Building on Windows
2011-01-23 03:32:57 +03:00
CC := gcc
PKG_CONFIG :=
2010-01-31 03:36:02 +03:00
endif
else
2011-03-10 00:32:54 +03:00
ifeq ( $( findstring amiga,$( TARGET) ) ,amiga)
2012-10-13 23:45:51 +04:00
ifeq ( $( findstring amiga,$( HOST) ) ,amiga)
PKG_CONFIG := pkg-config
else
2011-03-10 00:32:54 +03:00
ifeq ( $( TARGET) ,amigaos3)
GCCSDK_INSTALL_ENV ?= /opt/netsurf/m68k-unknown-amigaos/env
GCCSDK_INSTALL_CROSSBIN ?= /opt/netsurf/m68k-unknown-amigaos/cross/bin
SUBTARGET = os3
else
GCCSDK_INSTALL_ENV ?= /opt/netsurf/ppc-amigaos/env
GCCSDK_INSTALL_CROSSBIN ?= /opt/netsurf/ppc-amigaos/cross/bin
endif
override TARGET := amiga
2010-12-30 00:26:45 +03:00
CC := $( wildcard $( GCCSDK_INSTALL_CROSSBIN) /*gcc)
PKG_CONFIG := PKG_CONFIG_LIBDIR = " $( GCCSDK_INSTALL_ENV) /lib/pkgconfig " pkg-config
endif
else
2012-07-20 19:30:12 +04:00
ifeq ( $( TARGET) ,atari)
ifeq ( $( HOST) ,atari)
PKG_CONFIG := pkg-config
else
ifeq ( $( HOST) ,mint)
PKG_CONFIG := pkg-config
else
GCCSDK_INSTALL_ENV ?= /opt/netsurf/m68k-atari-mint/env
GCCSDK_INSTALL_CROSSBIN ?= /opt/netsurf/m68k-atari-mint/cross/bin
CC := $( wildcard $( GCCSDK_INSTALL_CROSSBIN) /*gcc)
PKG_CONFIG := PKG_CONFIG_LIBDIR = " $( GCCSDK_INSTALL_ENV) /lib/pkgconfig " pkg-config
endif
endif
else
2012-12-13 19:33:54 +04:00
ifeq ( $( TARGET) ,monkey)
ifeq ( $( origin GCCSDK_INSTALL_ENV) ,undefined)
PKG_CONFIG := pkg-config
else
PKG_CONFIG := PKG_CONFIG_LIBDIR = " $( GCCSDK_INSTALL_ENV) /lib/pkgconfig " pkg-config
endif
ifneq ( $( origin GCCSDK_INSTALL_CROSSBIN) ,undefined)
CC := $( wildcard $( GCCSDK_INSTALL_CROSSBIN) /*gcc)
CXX := $( wildcard $( GCCSDK_INSTALL_CROSSBIN) /*g++)
endif
else
2016-10-05 21:44:49 +03:00
ifeq ( $( TARGET) ,framebuffer)
2013-05-12 23:41:28 +04:00
ifeq ( $( origin GCCSDK_INSTALL_ENV) ,undefined)
PKG_CONFIG := pkg-config
else
PKG_CONFIG := PKG_CONFIG_LIBDIR = " $( GCCSDK_INSTALL_ENV) /lib/pkgconfig " pkg-config
endif
ifneq ( $( origin GCCSDK_INSTALL_CROSSBIN) ,undefined)
CC := $( wildcard $( GCCSDK_INSTALL_CROSSBIN) /*gcc)
CXX := $( wildcard $( GCCSDK_INSTALL_CROSSBIN) /*g++)
endif
2016-11-25 15:54:46 +03:00
2013-05-12 23:41:28 +04:00
else
2016-10-05 21:44:49 +03:00
# All native targets
2016-11-25 02:43:44 +03:00
# use native package config
PKG_CONFIG := pkg-config
2016-10-05 21:44:49 +03:00
# gtk target processing
ifeq ( $( TARGET) ,gtk3)
override TARGET := gtk
override NETSURF_GTK_MAJOR := 3
SUBTARGET = $( NETSURF_GTK_MAJOR)
else
ifeq ( $( TARGET) ,gtk)
ifeq ( $( origin NETSURF_GTK_MAJOR) ,undefined)
override NETSURF_GTK_MAJOR := 2
else
ifneq ( $( NETSURF_GTK_MAJOR) ,2)
SUBTARGET = $( NETSURF_GTK_MAJOR)
endif
endif
endif
endif
2013-05-12 23:41:28 +04:00
endif
2012-12-13 19:33:54 +04:00
endif
2012-07-20 19:30:12 +04:00
endif
2010-12-30 00:26:45 +03:00
endif
2010-01-31 03:36:02 +03:00
endif
2008-07-29 03:16:59 +04:00
endif
2008-06-04 00:13:34 +04:00
e n d i f
2007-12-23 00:15:58 +03:00
2012-12-13 23:27:16 +04:00
# compiler versioning to adjust warning flags
2018-11-07 00:52:53 +03:00
CC_VERSION := $( shell $( CC) -dumpfullversion -dumpversion)
2012-12-14 14:53:43 +04:00
CC_MAJOR := $( word 1,$( subst ., ,$( CC_VERSION) ) )
CC_MINOR := $( word 2,$( subst ., ,$( CC_VERSION) ) )
2012-12-13 23:27:16 +04:00
d e f i n e c c _ v e r _ g e
2018-09-07 16:26:12 +03:00
$( shell expr $ ( CC_MAJOR ) \> $ ( 1) \| \( $ ( CC_MAJOR ) = $ ( 1) \& $ ( CC_MINOR ) \>= $ ( 2) \) )
2012-12-13 23:27:16 +04:00
e n d e f
2010-10-29 04:54:27 +04:00
2012-08-20 21:08:47 +04:00
# CCACHE
i f e q ( $( origin CCACHE ) , u n d e f i n e d )
2012-08-20 21:46:28 +04:00
CCACHE = $( word 1,$( shell ccache -V 2>/dev/null) )
2012-08-20 21:08:47 +04:00
e n d i f
CC := $( CCACHE) $( CC)
# Target paths
2017-01-06 02:00:41 +03:00
OBJROOT = build/$( HOST) -$( TARGET) $( SUBTARGET)
2010-10-29 04:54:27 +04:00
DEPROOT := $( OBJROOT) /deps
TOOLROOT := $( OBJROOT) /tools
2008-04-07 23:13:11 +04:00
2016-02-15 17:59:23 +03:00
# keep C flags from environment
CFLAGS_ENV := $( CFLAGS)
CXXFLAGS_ENV := $( CXXFLAGS)
2008-07-26 21:08:23 +04:00
2014-04-30 14:56:05 +04:00
# A macro that conditionaly adds flags to the build when a feature is enabled.
#
2008-07-29 00:56:24 +04:00
# 1: Feature name (ie, NETSURF_USE_BMP -> BMP)
# 2: Parameters to add to CFLAGS
# 3: Parameters to add to LDFLAGS
2008-07-29 03:16:59 +04:00
# 4: Human-readable name for the feature
2008-07-29 00:56:24 +04:00
d e f i n e f e a t u r e _ e n a b l e d
2008-07-29 03:16:59 +04:00
ifeq ( $$ ( NETSURF_USE_$( 1) ) ,YES)
CFLAGS += $( 2)
2014-09-05 19:01:44 +04:00
CXXFLAGS += $( 2)
2008-07-29 03:16:59 +04:00
LDFLAGS += $( 3)
2008-07-29 13:44:13 +04:00
ifneq ( $( MAKECMDGOALS) ,clean)
2010-04-06 22:53:13 +04:00
$$ ( info M.CONFIG: $( 4) enabled ( NETSURF_USE_$( 1) := YES) )
2008-07-29 13:44:13 +04:00
endif
2010-04-06 20:25:51 +04:00
else ifeq ( $$ ( NETSURF_USE_$( 1) ) ,NO)
2008-07-29 13:44:13 +04:00
ifneq ( $( MAKECMDGOALS) ,clean)
2010-04-06 22:53:13 +04:00
$$ ( info M.CONFIG: $( 4) disabled ( NETSURF_USE_$( 1) := NO) )
2008-07-29 13:44:13 +04:00
endif
2010-04-06 20:25:51 +04:00
else
2010-04-06 22:53:13 +04:00
$$ ( info M.CONFIG: $( 4) error ( NETSURF_USE_$( 1) := $$ ( NETSURF_USE_$( 1) ) ) )
2010-04-06 20:25:51 +04:00
$$ ( error NETSURF_USE_$( 1) must be YES or NO)
2008-07-29 03:16:59 +04:00
endif
2008-07-29 00:56:24 +04:00
e n d e f
2014-04-30 14:56:05 +04:00
# A macro that conditionaly adds flags to the build with a uniform display.
#
# 1: Feature name (ie, NETSURF_USE_BMP -> BMP)
# 2: Human-readable name for the feature
# 3: Parameters to add to CFLAGS when enabled
# 4: Parameters to add to LDFLAGS when enabled
# 5: Parameters to add to CFLAGS when disabled
# 6: Parameters to add to LDFLAGS when disabled
d e f i n e f e a t u r e _ s w i t c h
ifeq ( $$ ( NETSURF_USE_$( 1) ) ,YES)
CFLAGS += $( 3)
2014-09-05 19:01:44 +04:00
CXXFLAGS += $( 3)
2014-04-30 14:56:05 +04:00
LDFLAGS += $( 4)
ifneq ( $( MAKECMDGOALS) ,clean)
$$ ( info M.CONFIG: $( 2) enabled ( NETSURF_USE_$( 1) := YES) )
endif
else ifeq ( $$ ( NETSURF_USE_$( 1) ) ,NO)
CFLAGS += $( 5)
2014-09-05 19:01:44 +04:00
CXXFLAGS += $( 5)
2014-04-30 14:56:05 +04:00
LDFLAGS += $( 6)
ifneq ( $( MAKECMDGOALS) ,clean)
$$ ( info M.CONFIG: $( 2) disabled ( NETSURF_USE_$( 1) := NO) )
endif
else
$$ ( info M.CONFIG: $( 4) error ( NETSURF_USE_$( 1) := $$ ( NETSURF_USE_$( 1) ) ) )
$$ ( error NETSURF_USE_$( 1) must be YES or NO)
endif
e n d e f
2012-12-13 21:23:47 +04:00
# Extend flags with appropriate values from pkg-config for enabled features
#
# 1: pkg-config required modules for feature
# 2: Human-readable name for the feature
d e f i n e p k g _ c o n f i g _ f i n d _ a n d _ a d d
ifeq ( $$ ( PKG_CONFIG) ,)
$$ ( error pkg-config is required to auto-detect feature availability)
endif
PKG_CONFIG_$( 1) _EXISTS := $$ ( shell $$ ( PKG_CONFIG) --exists $( 1) && echo yes)
ifeq ( $$ ( PKG_CONFIG_$( 1) _EXISTS) ,yes)
CFLAGS += $$ ( shell $$ ( PKG_CONFIG) --cflags $( 1) )
2014-09-05 19:01:44 +04:00
CXXFLAGS += $$ ( shell $$ ( PKG_CONFIG) --cflags $( 1) )
2012-12-13 21:23:47 +04:00
LDFLAGS += $$ ( shell $$ ( PKG_CONFIG) --libs $( 1) )
ifneq ( $( MAKECMDGOALS) ,clean)
$$ ( info PKG.CNFG: $( 2) ( $( 1) ) enabled)
endif
else
ifneq ( $( MAKECMDGOALS) ,clean)
$$ ( info PKG.CNFG: $( 2) ( $( 1) ) failed)
$$ ( error Unable to find library for : $( 2) ( $( 1) ) )
endif
endif
e n d e f
2012-12-13 20:31:05 +04:00
# Extend flags with appropriate values from pkg-config for enabled features
#
2008-07-29 03:16:59 +04:00
# 1: Feature name (ie, NETSURF_USE_RSVG -> RSVG)
# 2: pkg-config required modules for feature
# 3: Human-readable name for the feature
2012-12-13 20:31:05 +04:00
d e f i n e p k g _ c o n f i g _ f i n d _ a n d _ a d d _ e n a b l e d
2008-07-29 03:16:59 +04:00
ifeq ( $$ ( PKG_CONFIG) ,)
$$ ( error pkg-config is required to auto-detect feature availability)
endif
2010-04-06 20:25:51 +04:00
NETSURF_FEATURE_$( 1) _AVAILABLE := $$ ( shell $$ ( PKG_CONFIG) --exists $( 2) && echo yes)
2019-02-17 14:50:52 +03:00
NETSURF_FEATURE_$( 1) _CFLAGS ?= -DWITH_$( 1)
2010-04-06 20:25:51 +04:00
ifeq ( $$ ( NETSURF_USE_$( 1) ) ,YES)
ifeq ( $$ ( NETSURF_FEATURE_$( 1) _AVAILABLE) ,yes)
CFLAGS += $$ ( shell $$ ( PKG_CONFIG) --cflags $( 2) ) $$ ( NETSURF_FEATURE_$( 1) _CFLAGS)
2014-09-05 19:01:44 +04:00
CXXFLAGS += $$ ( shell $$ ( PKG_CONFIG) --cflags $( 2) ) $$ ( NETSURF_FEATURE_$( 1) _CFLAGS)
2010-04-06 20:25:51 +04:00
LDFLAGS += $$ ( shell $$ ( PKG_CONFIG) --libs $( 2) ) $$ ( NETSURF_FEATURE_$( 1) _LDFLAGS)
ifneq ( $( MAKECMDGOALS) ,clean)
2010-04-06 22:53:13 +04:00
$$ ( info M.CONFIG: $( 3) ( $( 2) ) enabled ( NETSURF_USE_$( 1) := YES) )
2008-07-29 03:16:59 +04:00
endif
else
2011-04-22 14:17:00 +04:00
ifneq ( $( MAKECMDGOALS) ,clean)
$$ ( info M.CONFIG: $( 3) ( $( 2) ) failed ( NETSURF_USE_$( 1) := YES) )
$$ ( error Unable to find library for : $( 3) ( $( 2) ) )
endif
2010-04-06 20:25:51 +04:00
endif
else ifeq ( $$ ( NETSURF_USE_$( 1) ) ,AUTO)
ifeq ( $$ ( NETSURF_FEATURE_$( 1) _AVAILABLE) ,yes)
CFLAGS += $$ ( shell $$ ( PKG_CONFIG) --cflags $( 2) ) $$ ( NETSURF_FEATURE_$( 1) _CFLAGS)
2014-09-05 19:01:44 +04:00
CXXFLAGS += $$ ( shell $$ ( PKG_CONFIG) --cflags $( 2) ) $$ ( NETSURF_FEATURE_$( 1) _CFLAGS)
2010-04-06 20:25:51 +04:00
LDFLAGS += $$ ( shell $$ ( PKG_CONFIG) --libs $( 2) ) $$ ( NETSURF_FEATURE_$( 1) _LDFLAGS)
2008-07-29 13:44:13 +04:00
ifneq ( $( MAKECMDGOALS) ,clean)
2010-04-06 22:53:13 +04:00
$$ ( info M.CONFIG: $( 3) ( $( 2) ) auto-enabled ( NETSURF_USE_$( 1) := AUTO) )
2011-08-28 18:29:15 +04:00
NETSURF_USE_$( 1) := YES
2008-07-29 13:44:13 +04:00
endif
2010-04-06 20:25:51 +04:00
else
ifneq ( $( MAKECMDGOALS) ,clean)
$$ ( info M.CONFIG: $( 3) ( $( 2) ) auto-disabled ( NETSURF_USE_$( 1) := AUTO) )
2011-08-28 18:29:15 +04:00
NETSURF_USE_$( 1) := NO
2008-07-29 03:16:59 +04:00
endif
endif
2010-04-06 20:25:51 +04:00
else ifeq ( $$ ( NETSURF_USE_$( 1) ) ,NO)
2008-07-29 13:44:13 +04:00
ifneq ( $( MAKECMDGOALS) ,clean)
2010-04-06 22:53:13 +04:00
$$ ( info M.CONFIG: $( 3) ( $( 2) ) disabled ( NETSURF_USE_$( 1) := NO) )
2008-07-29 13:44:13 +04:00
endif
2010-04-06 20:25:51 +04:00
else
2011-04-22 14:17:00 +04:00
ifneq ( $( MAKECMDGOALS) ,clean)
$$ ( info M.CONFIG: $( 3) ( $( 2) ) error ( NETSURF_USE_$( 1) := $$ ( NETSURF_USE_$( 1) ) ) )
$$ ( error NETSURF_USE_$( 1) must be YES, NO, or AUTO)
endif
2008-07-29 03:16:59 +04:00
endif
e n d e f
2010-10-27 22:39:24 +04:00
# ----------------------------------------------------------------------------
# General flag setup
# ----------------------------------------------------------------------------
2014-09-05 19:01:44 +04:00
# Set up the warning flags here so that they can be overridden in the
# Makefile.config
COMMON_WARNFLAGS = -W -Wall -Wundef -Wpointer-arith -Wcast-align \
-Wwrite-strings -Wmissing-declarations -Wuninitialized
2016-02-15 17:59:23 +03:00
2012-12-13 23:27:16 +04:00
i f n e q ( $( CC_MAJOR ) , 2 )
2014-09-05 19:01:44 +04:00
COMMON_WARNFLAGS += -Wno-unused-parameter
2010-10-27 22:39:24 +04:00
e n d i f
2016-02-15 17:59:23 +03:00
2012-12-13 23:27:16 +04:00
# deal with lots of unwanted warnings from javascript
i f e q ( $( call cc_ver_ge ,4,6) , 1 )
2016-02-15 17:59:23 +03:00
COMMON_WARNFLAGS += -Wno-unused-but-set-variable
2012-12-13 23:27:16 +04:00
e n d i f
2016-02-15 17:59:23 +03:00
2018-09-07 14:53:51 +03:00
# Implicit fallthrough warnings suppressed by comment
i f e q ( $( call cc_ver_ge ,7,1) , 1 )
COMMON_WARNFLAGS += -Wimplicit-fallthrough= 3
e n d i f
2016-02-15 17:59:23 +03:00
# deal with chaging warning flags for different platforms
2014-09-03 21:24:44 +04:00
i f e q ( $( HOST ) , O p e n B S D )
# OpenBSD headers are not compatible with redundant declaration warning
2014-09-05 19:01:44 +04:00
COMMON_WARNFLAGS += -Wno-redundant-decls
2014-09-03 21:24:44 +04:00
e l s e
2014-09-05 19:01:44 +04:00
COMMON_WARNFLAGS += -Wredundant-decls
2014-09-03 21:24:44 +04:00
e n d i f
2010-10-27 22:39:24 +04:00
2014-09-05 19:01:44 +04:00
# c++ default warning flags
CXXWARNFLAGS :=
# C default warning flags
CWARNFLAGS := -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs
2017-08-31 01:27:28 +03:00
# Pull in the default configuration
2010-10-27 22:39:24 +04:00
i n c l u d e M a k e f i l e . d e f a u l t s
2017-08-31 01:27:28 +03:00
# Pull in the user configuration
- i n c l u d e M a k e f i l e . c o n f i g
2014-11-14 16:46:08 +03:00
# libraries enabled by feature switch without pkgconfig file
2014-04-30 14:56:05 +04:00
$( eval $ ( call feature_switch ,JPEG ,JPEG ( libjpeg ) ,-DWITH_JPEG ,-ljpeg ,-UWITH_JPEG ,) )
$( eval $ ( call feature_switch ,HARU_PDF ,PDF export ( haru ) ,-DWITH_PDF_EXPORT ,-lhpdf -lpng ,-UWITH_PDF_EXPORT ,) )
$( eval $ ( call feature_switch ,LIBICONV_PLUG ,glibc internal iconv ,-DLIBICONV_PLUG ,,-ULIBICONV_PLUG ,-liconv ) )
2015-08-09 14:27:28 +03:00
$( eval $ ( call feature_switch ,DUKTAPE ,Javascript ( Duktape ) ,,,,,) )
2008-07-29 00:56:24 +04:00
2014-11-14 16:46:08 +03:00
# Common libraries with pkgconfig
2015-04-18 00:48:55 +03:00
$( eval $ ( call pkg_config_find_and_add ,libcss ,CSS ) )
$( eval $ ( call pkg_config_find_and_add ,libdom ,DOM ) )
2014-11-27 00:29:13 +03:00
$( eval $ ( call pkg_config_find_and_add ,libnsutils ,nsutils ) )
2015-04-18 00:48:55 +03:00
$( eval $ ( call pkg_config_find_and_add ,libutf 8proc ,utf 8proc ) )
2014-11-14 16:46:08 +03:00
# Common libraries without pkg-config support
2008-07-29 00:56:24 +04:00
LDFLAGS += -lz
2016-05-06 00:28:51 +03:00
# Optional libraries with pkgconfig
# define additional CFLAGS and LDFLAGS requirements for pkg-configed libs
2019-02-17 14:50:52 +03:00
# We only need to define the ones where the feature name doesn't exactly
# match the WITH_FEATURE flag
2016-05-06 00:28:51 +03:00
NETSURF_FEATURE_NSSVG_CFLAGS := -DWITH_NS_SVG
NETSURF_FEATURE_ROSPRITE_CFLAGS := -DWITH_NSSPRITE
2016-10-19 12:12:41 +03:00
# libcurl and openssl ordering matters as if libcurl requires ssl it
# needs to come first in link order to ensure its symbols can be
# resolved by the subsequent openssl
2016-08-13 15:09:39 +03:00
# freemint does not support pkg-config for libcurl
i f e q ( $( HOST ) , m i n t )
CFLAGS += $( shell curl-config --cflags)
LDFLAGS += $( shell curl-config --libs)
e l s e
$( eval $( call pkg_config_find_and_add_enabled,CURL,libcurl,Curl) )
e n d i f
2016-10-19 12:12:41 +03:00
$( eval $ ( call pkg_config_find_and_add_enabled ,OPENSSL ,openssl ,OpenSSL ) )
2016-08-13 15:09:39 +03:00
2019-02-17 15:09:17 +03:00
$( eval $ ( call pkg_config_find_and_add_enabled ,WEBP ,libwebp ,WEBP ) )
2016-05-06 00:28:51 +03:00
$( eval $ ( call pkg_config_find_and_add_enabled ,PNG ,libpng ,PNG ) )
$( eval $ ( call pkg_config_find_and_add_enabled ,BMP ,libnsbmp ,BMP ) )
$( eval $ ( call pkg_config_find_and_add_enabled ,GIF ,libnsgif ,GIF ) )
$( eval $ ( call pkg_config_find_and_add_enabled ,NSSVG ,libsvgtiny ,SVG ) )
$( eval $ ( call pkg_config_find_and_add_enabled ,ROSPRITE ,librosprite ,Sprite ) )
2016-09-20 23:45:35 +03:00
$( eval $ ( call pkg_config_find_and_add_enabled ,NSPSL ,libnspsl ,PSL ) )
2017-08-31 09:57:35 +03:00
$( eval $ ( call pkg_config_find_and_add_enabled ,NSLOG ,libnslog ,LOG ) )
2016-05-06 00:28:51 +03:00
2016-06-06 16:47:27 +03:00
# List of directories in which headers are searched for
INCLUDE_DIRS := . include $( OBJROOT)
2012-12-20 19:27:07 +04:00
# export the user agent format
2008-07-29 19:10:31 +04:00
CFLAGS += -DNETSURF_UA_FORMAT_STRING= \" $( NETSURF_UA_FORMAT_STRING) \"
2014-09-05 19:01:44 +04:00
CXXFLAGS += -DNETSURF_UA_FORMAT_STRING= \" $( NETSURF_UA_FORMAT_STRING) \"
2008-07-29 19:10:31 +04:00
2012-12-20 19:27:07 +04:00
# set the default homepage to use
CFLAGS += -DNETSURF_HOMEPAGE= \" $( NETSURF_HOMEPAGE) \"
2014-09-05 19:01:44 +04:00
CXXFLAGS += -DNETSURF_HOMEPAGE= \" $( NETSURF_HOMEPAGE) \"
Merged revisions 5309-5406,5409-5422 via svnmerge from
svn://svn.netsurf-browser.org/branches/vince/netsurf-fb
........
r5309 | vince | 2008-09-13 10:59:10 +0100 (Sat, 13 Sep 2008) | 2 lines
first stab at framebuffer frontend
........
r5313 | vince | 2008-09-14 15:08:52 +0100 (Sun, 14 Sep 2008) | 2 lines
add line plotters
........
r5314 | vince | 2008-09-14 15:28:12 +0100 (Sun, 14 Sep 2008) | 2 lines
add rectangle plot to 16bpp plotters
........
r5315 | vince | 2008-09-14 19:58:57 +0100 (Sun, 14 Sep 2008) | 2 lines
improve 16bpp image plot
........
r5316 | vince | 2008-09-15 00:35:32 +0100 (Mon, 15 Sep 2008) | 2 lines
abstract the os specific framebuffer init
........
r5317 | vince | 2008-09-15 11:18:51 +0100 (Mon, 15 Sep 2008) | 2 lines
first cut of linux frontend
........
r5318 | vince | 2008-09-15 12:01:00 +0100 (Mon, 15 Sep 2008) | 2 lines
remove junk includes
........
r5319 | vince | 2008-09-15 12:09:02 +0100 (Mon, 15 Sep 2008) | 2 lines
make plotters OS agnostic again
........
r5322 | vince | 2008-09-15 15:55:01 +0100 (Mon, 15 Sep 2008) | 2 lines
Linux frontend operates
........
r5323 | vince | 2008-09-15 16:32:47 +0100 (Mon, 15 Sep 2008) | 2 lines
abstract out OS specific input
........
r5326 | vince | 2008-09-15 19:21:01 +0100 (Mon, 15 Sep 2008) | 2 lines
Improve linux mode setting
........
r5329 | vince | 2008-09-15 21:13:33 +0100 (Mon, 15 Sep 2008) | 2 lines
improve text clipping
........
r5339 | vince | 2008-09-16 00:07:57 +0100 (Tue, 16 Sep 2008) | 2 lines
possibly fix text clipping issue
........
r5342 | vince | 2008-09-16 00:39:36 +0100 (Tue, 16 Sep 2008) | 2 lines
consolidate polygon plotters
........
r5344 | dsilvers | 2008-09-16 10:21:06 +0100 (Tue, 16 Sep 2008) | 1 line
Fix up the framebuffer target makefile a bit more, add some config options for it
........
r5345 | dsilvers | 2008-09-16 10:22:19 +0100 (Tue, 16 Sep 2008) | 1 line
Ensure the appropriate frontend is selected when building framebuffer
........
r5346 | dsilvers | 2008-09-16 10:27:16 +0100 (Tue, 16 Sep 2008) | 1 line
Update build system to support targetting separate framebuffer frontends in different build trees, update executable to be nsfb-blah
........
r5350 | vince | 2008-09-16 17:15:04 +0100 (Tue, 16 Sep 2008) | 1 line
Add -g to provide symbols for framebuffer link
........
r5351 | vince | 2008-09-16 17:17:09 +0100 (Tue, 16 Sep 2008) | 1 line
framebuffer scheduler now works, plotters tweaked, gui tracks window redraw requirements better, keypresses not duplicated under linux fb
........
r5352 | dsilvers | 2008-09-16 17:38:53 +0100 (Tue, 16 Sep 2008) | 1 line
Ensure we only allow one fetcher at a time
........
r5361 | vince | 2008-09-17 11:48:44 +0100 (Wed, 17 Sep 2008) | 2 lines
initial cursor support
........
r5362 | vince | 2008-09-17 13:56:47 +0100 (Wed, 17 Sep 2008) | 2 lines
add mouse handling
........
r5363 | vince | 2008-09-17 14:14:44 +0100 (Wed, 17 Sep 2008) | 2 lines
add framebuffer resources
........
r5364 | vince | 2008-09-17 17:12:21 +0100 (Wed, 17 Sep 2008) | 2 lines
add reasonable pointer
........
r5366 | vince | 2008-09-17 17:17:25 +0100 (Wed, 17 Sep 2008) | 2 lines
fix pointer alpha
........
r5370 | vince | 2008-09-18 13:43:53 +0100 (Thu, 18 Sep 2008) | 2 lines
warning squash and cleanup ready for trunk merge
........
r5375 | vince | 2008-09-19 14:58:43 +0100 (Fri, 19 Sep 2008) | 2 lines
Working mouse navigation
........
r5377 | vince | 2008-09-20 14:06:22 +0100 (Sat, 20 Sep 2008) | 2 lines
Improve scrolling
........
r5378 | vince | 2008-09-20 14:46:46 +0100 (Sat, 20 Sep 2008) | 2 lines
fix redraw issues with scrolling
........
r5380 | vince | 2008-09-20 17:08:43 +0100 (Sat, 20 Sep 2008) | 3 lines
Alter panning to use its own flag so it doesnt cause invalid redraw
operations
........
r5381 | vince | 2008-09-20 21:52:45 +0100 (Sat, 20 Sep 2008) | 2 lines
add dummy framebuffer
........
r5383 | vince | 2008-09-21 00:00:15 +0100 (Sun, 21 Sep 2008) | 2 lines
fix segfault when cursor is off teh bottom of teh screen
........
r5384 | vince | 2008-09-21 00:06:08 +0100 (Sun, 21 Sep 2008) | 2 lines
fix off by one in pointer fix
........
r5385 | vince | 2008-09-21 00:25:09 +0100 (Sun, 21 Sep 2008) | 2 lines
when fixing bloody silly off by one errors remember to fix *both* references
........
r5387 | vince | 2008-09-21 00:38:13 +0100 (Sun, 21 Sep 2008) | 2 lines
last try at stopping the pointer segfault
........
r5388 | vince | 2008-09-21 16:24:18 +0100 (Sun, 21 Sep 2008) | 2 lines
improve vertical text clipping
........
r5392 | vince | 2008-09-21 23:11:51 +0100 (Sun, 21 Sep 2008) | 2 lines
Improve text plotters
........
r5393 | vince | 2008-09-21 23:34:38 +0100 (Sun, 21 Sep 2008) | 2 lines
fix 32bpp line plotting
........
r5394 | vince | 2008-09-22 00:00:03 +0100 (Mon, 22 Sep 2008) | 2 lines
Fix off by one error in line plotting clipping
........
r5397 | vince | 2008-09-22 13:46:22 +0100 (Mon, 22 Sep 2008) | 2 lines
Fix bitmap tileing
........
r5398 | vince | 2008-09-22 17:46:02 +0100 (Mon, 22 Sep 2008) | 2 lines
enable knockout renderer
........
r5399 | vince | 2008-09-22 18:43:48 +0100 (Mon, 22 Sep 2008) | 2 lines
ensure clipping region lies within window, caused by knockout renderer
........
r5400 | vince | 2008-09-22 19:20:25 +0100 (Mon, 22 Sep 2008) | 2 lines
update cursor to one swiped from X windows
........
r5405 | vince | 2008-09-23 09:09:05 +0100 (Tue, 23 Sep 2008) | 2 lines
fix vertical scroll limit
........
r5412 | dsilvers | 2008-09-23 10:53:14 +0100 (Tue, 23 Sep 2008) | 1 line
Revert noisy fetcher patch
........
r5413 | dsilvers | 2008-09-23 10:58:00 +0100 (Tue, 23 Sep 2008) | 1 line
Add header guards
........
r5414 | dsilvers | 2008-09-23 11:31:31 +0100 (Tue, 23 Sep 2008) | 1 line
Tidy the region clipping slightly
........
r5416 | dsilvers | 2008-09-23 12:05:00 +0100 (Tue, 23 Sep 2008) | 1 line
Rationalise how the framebuffer frontend finds resources and options
........
r5418 | dsilvers | 2008-09-23 13:59:00 +0100 (Tue, 23 Sep 2008) | 1 line
Ensure options are overridden after load, and squash an fb_gui.c warning
........
r5419 | dsilvers | 2008-09-23 14:20:07 +0100 (Tue, 23 Sep 2008) | 1 line
Support fb_mode and fb_device options
........
r5420 | dsilvers | 2008-09-23 14:21:48 +0100 (Tue, 23 Sep 2008) | 1 line
Support option_fb_device in the able frontend
........
r5421 | dsilvers | 2008-09-23 14:25:17 +0100 (Tue, 23 Sep 2008) | 1 line
Ensure target_blank is disabled
........
r5422 | dsilvers | 2008-09-23 14:39:00 +0100 (Tue, 23 Sep 2008) | 1 line
Rework linux fb frontend to support scanning and opening all event devices for input
........
svn path=/trunk/netsurf/; revision=5423
2008-09-23 18:00:40 +04:00
2017-08-31 09:57:35 +03:00
# set the logging level
CFLAGS += -DNETSURF_LOG_LEVEL= $( NETSURF_LOG_LEVEL)
CXXFLAGS += -DNETSURF_LOG_LEVEL= $( NETSURF_LOG_LEVEL)
2018-07-28 16:24:31 +03:00
# If we're building the sanitize goal, override things
2018-07-28 13:17:07 +03:00
i f n e q ( $( filter -out sanitize ,$ ( MAKECMDGOALS ) ) , $( MAKECMDGOALS ) )
override NETSURF_USE_SANITIZER : = YES
override NETSURF_RECOVER_SANITIZERS : = NO
e n d i f
# If we're going to use the sanitizer set it up
i f e q ( $( NETSURF_USE_SANITIZER ) , Y E S )
SAN_FLAGS := -fsanitize= address -fsanitize= undefined
i f e q ( $( NETSURF_RECOVER_SANITIZERS ) , N O )
SAN_FLAGS += -fno-sanitize-recover
e n d i f
e l s e
SAN_FLAGS :=
e n d i f
CFLAGS += $( SAN_FLAGS)
CXXFLAGS += $( SAN_FLAGS)
LDFLAGS += $( SAN_FLAGS)
2017-09-08 23:15:41 +03:00
# and the logging filter
CFLAGS += -DNETSURF_BUILTIN_LOG_FILTER= \" $( NETSURF_BUILTIN_LOG_FILTER) \"
CXXFLAGS += -DNETSURF_BUILTIN_LOG_FILTER= \" $( NETSURF_BUILTIN_LOG_FILTER) \"
# and the verbose logging filter
CFLAGS += -DNETSURF_BUILTIN_VERBOSE_FILTER= \" $( NETSURF_BUILTIN_VERBOSE_FILTER) \"
CXXFLAGS += -DNETSURF_BUILTIN_VERBOSE_FILTER= \" $( NETSURF_BUILTIN_VERBOSE_FILTER) \"
2008-07-29 00:56:24 +04:00
# ----------------------------------------------------------------------------
# General make rules
# ----------------------------------------------------------------------------
2008-03-22 03:49:56 +03:00
$(OBJROOT)/created :
$( VQ) echo " MKDIR: $( OBJROOT) "
2015-08-09 14:27:28 +03:00
$( Q) $( MKDIR) -p $( OBJROOT)
2008-03-22 03:49:56 +03:00
$( Q) $( TOUCH) $( OBJROOT) /created
$(DEPROOT)/created : $( OBJROOT ) /created
$( VQ) echo " MKDIR: $( DEPROOT) "
2015-08-09 14:27:28 +03:00
$( Q) $( MKDIR) -p $( DEPROOT)
2008-03-22 03:49:56 +03:00
$( Q) $( TOUCH) $( DEPROOT) /created
2009-02-26 17:14:29 +03:00
$(TOOLROOT)/created : $( OBJROOT ) /created
$( VQ) echo " MKDIR: $( TOOLROOT) "
2015-08-09 14:27:28 +03:00
$( Q) $( MKDIR) -p $( TOOLROOT)
2009-02-26 17:14:29 +03:00
$( Q) $( TOUCH) $( TOOLROOT) /created
2015-04-07 02:08:14 +03:00
CLEANS :=
2008-12-09 14:12:58 +03:00
POSTEXES :=
2010-10-29 04:54:27 +04:00
# ----------------------------------------------------------------------------
2011-08-28 18:29:15 +04:00
# Target specific setup
2010-10-29 04:54:27 +04:00
# ----------------------------------------------------------------------------
2016-05-06 00:28:51 +03:00
i n c l u d e f r o n t e n d s / M a k e f i l e
2007-12-23 00:15:58 +03:00
2010-10-29 04:54:27 +04:00
# ----------------------------------------------------------------------------
2011-08-28 18:29:15 +04:00
# General source file setup
2010-10-29 04:54:27 +04:00
# ----------------------------------------------------------------------------
2013-03-11 21:50:12 +04:00
# Content sources
i n c l u d e c o n t e n t / M a k e f i l e
# utility sources
i n c l u d e u t i l s / M a k e f i l e
# http utility sources
i n c l u d e u t i l s / h t t p / M a k e f i l e
2017-01-15 15:47:38 +03:00
# nsurl utility sources
i n c l u d e u t i l s / n s u r l / M a k e f i l e
2013-03-11 21:50:12 +04:00
# Desktop sources
i n c l u d e d e s k t o p / M a k e f i l e
# S_COMMON are sources common to all builds
2017-01-15 15:47:38 +03:00
S_COMMON := \
$( S_CONTENT) \
$( S_FETCHERS) \
$( S_UTILS) \
$( S_HTTP) \
$( S_NSURL) \
$( S_DESKTOP) \
$( S_JAVASCRIPT_BINDING)
2010-10-29 04:54:27 +04:00
2016-06-06 16:47:27 +03:00
2015-04-07 02:08:14 +03:00
# ----------------------------------------------------------------------------
# Message targets
# ----------------------------------------------------------------------------
# Message splitting rule generation macro
# 1 = Language
d e f i n e s p l i t _ m e s s a g e s
2018-04-22 12:11:09 +03:00
$$ (MESSAGES_TARGET)/$(1)/Messages : resources /FatMessages
2015-04-07 02:08:14 +03:00
$$ ( VQ) echo " MSGSPLIT: Language: $( 1) Filter: $$ (MESSAGES_FILTER) "
2017-01-07 16:21:25 +03:00
$$ ( Q) $$ ( MKDIR) -p $$ ( MESSAGES_TARGET) /$( 1)
2018-04-22 12:11:09 +03:00
$$ ( Q) $$ ( RM) $$ @
$$ ( Q) $$ ( SPLIT_MESSAGES) -l $( 1) -p $$ ( MESSAGES_FILTER) -f messages -o $$ @ -z $$ <
2015-04-07 02:08:14 +03:00
CLEAN_MESSAGES += $$ ( MESSAGES_TARGET) /$( 1) /Messages
MESSAGES += $$ ( MESSAGES_TARGET) /$( 1) /Messages
e n d e f
2016-06-07 18:01:04 +03:00
# generate the message file rules
2015-04-07 02:08:14 +03:00
$( eval $ ( foreach LANG ,$ ( MESSAGES_LANGUAGES ) , \
$( call split_messages,$( LANG) ) ) )
clean-messages :
$( VQ) echo " CLEAN: $( CLEAN_MESSAGES) "
$( Q) $( RM) $( CLEAN_MESSAGES)
CLEANS += clean-messages
2010-10-29 04:54:27 +04:00
# ----------------------------------------------------------------------------
# Source file setup
# ----------------------------------------------------------------------------
2011-08-28 18:29:15 +04:00
# Force exapnsion of source file list
SOURCES := $( SOURCES)
2010-10-29 04:54:27 +04:00
i f e q ( $( SOURCES ) , )
$( error Unable to build NetSurf , could not determine set of sources to build )
e n d i f
2011-01-19 04:36:21 +03:00
OBJECTS := $( sort $( addprefix $( OBJROOT) /,$( subst /,_,$( patsubst %.c,%.o,$( patsubst %.cpp,%.o,$( patsubst %.m,%.o,$( patsubst %.s,%.o,$( SOURCES) ) ) ) ) ) ) )
2007-12-23 00:15:58 +03:00
2016-06-07 18:01:04 +03:00
# Include directory flags
IFLAGS = $( addprefix -I,$( INCLUDE_DIRS) )
2015-04-07 02:08:14 +03:00
$(EXETARGET) : $( OBJECTS ) $( RESOURCES ) $( MESSAGES )
2007-12-23 00:15:58 +03:00
$( VQ) echo " LINK: $( EXETARGET) "
2009-03-28 03:59:11 +03:00
i f n e q ( $( TARGET ) $( SUBTARGET ) , r i s c o s - e l f )
2008-03-20 16:21:53 +03:00
$( Q) $( CC) -o $( EXETARGET) $( OBJECTS) $( LDFLAGS)
2009-03-28 03:59:11 +03:00
e l s e
2012-12-10 15:38:52 +04:00
$( Q) $( CXX) -o $( EXETARGET:,ff8= ,e1f) $( OBJECTS) $( LDFLAGS)
2009-03-28 03:59:11 +03:00
$( Q) $( ELF2AIF) $( EXETARGET:,ff8= ,e1f) $( EXETARGET)
$( Q) $( RM) $( EXETARGET:,ff8= ,e1f)
e n d i f
2008-07-29 12:57:51 +04:00
i f e q ( $( NETSURF_STRIP_BINARY ) , Y E S )
$( VQ) echo " STRIP: $( EXETARGET) "
$( Q) $( STRIP) $( EXETARGET)
e n d i f
2008-06-04 00:13:34 +04:00
i f e q ( $( TARGET ) , b e o s )
$( VQ) echo " XRES: $( EXETARGET) "
$( Q) $( BEOS_XRES) -o $( EXETARGET) $( RSRC_BEOS)
$( VQ) echo " SETVER: $( EXETARGET) "
$( Q) $( BEOS_SETVER) $( EXETARGET) \
-app $( VERSION_MAJ) $( VERSION_MIN) 0 d 0 \
-short " NetSurf $( VERSION_FULL) " \
2016-04-06 14:01:07 +03:00
-long " NetSurf $( VERSION_FULL) © 2003 - 2016 The NetSurf Developers "
2008-06-04 00:13:34 +04:00
$( VQ) echo " MIMESET: $( EXETARGET) "
$( Q) $( BEOS_MIMESET) $( EXETARGET)
e n d i f
2007-12-23 00:15:58 +03:00
clean-target :
$( VQ) echo " CLEAN: $( EXETARGET) "
$( Q) $( RM) $( EXETARGET)
2015-04-07 02:08:14 +03:00
CLEANS += clean-target
2007-12-23 00:15:58 +03:00
2011-03-13 14:59:20 +03:00
clean-testament :
2014-04-08 14:40:16 +04:00
$( VQ) echo " CLEAN: testament.h"
$( Q) $( RM) $( OBJROOT) /testament.h
2015-04-07 02:08:14 +03:00
CLEANS += clean-testament
2011-03-13 14:59:20 +03:00
2007-12-23 00:15:58 +03:00
clean-builddir :
$( VQ) echo " CLEAN: $( OBJROOT) "
$( Q) $( RM) -r $( OBJROOT)
CLEANS += clean-builddir
2008-12-09 14:12:58 +03:00
2015-04-07 02:08:14 +03:00
.PHONY : all -program testament
2014-09-07 03:28:19 +04:00
2014-04-08 14:40:16 +04:00
testament $(OBJROOT)/testament.h :
$( Q) $( PERL) utils/git-testament.pl $( CURDIR) $( OBJROOT) /testament.h
2011-03-13 14:59:20 +03:00
2015-04-07 02:08:14 +03:00
all-program : $( EXETARGET ) $( POSTEXES )
2007-12-23 00:15:58 +03:00
.SUFFIXES :
DEPFILES :=
# Now some macros which build the make system
# 1 = Source file
# 2 = dep filename, no prefix
# 3 = obj filename, no prefix
2008-06-04 00:13:34 +04:00
d e f i n e d e p e n d e n c y _ g e n e r a t e _ c
DEPFILES += $( 2)
e n d e f
2007-12-23 00:15:58 +03:00
# 1 = Source file
# 2 = dep filename, no prefix
# 3 = obj filename, no prefix
d e f i n e d e p e n d e n c y _ g e n e r a t e _ s
DEPFILES += $( 2)
e n d e f
# 1 = Source file
# 2 = obj filename, no prefix
# 3 = dep filename, no prefix
2012-12-14 15:30:14 +04:00
i f e q ( $( CC_MAJOR ) , 2 )
2009-03-30 03:32:02 +04:00
# simpler deps tracking for gcc2...
2009-03-22 02:20:15 +03:00
d e f i n e c o m p i l e _ t a r g e t _ c
2018-04-21 13:45:52 +03:00
$$ (OBJROOT)/$(2) : $( 1) $$( OBJROOT ) /created $$( DEPROOT ) /created
2009-03-30 03:32:02 +04:00
$$ ( VQ) echo " DEP: $( 1) "
$$ ( Q) $$ ( RM) $$ ( DEPROOT) /$( 3)
2016-06-06 16:47:27 +03:00
$$ ( Q) $$ ( CC) $$ ( IFLAGS) $$ ( CFLAGS) -MM \
2009-03-30 03:32:02 +04:00
$( 1) | sed 's,^.*:,$$(DEPROOT)/$(3) $$(OBJROOT)/$(2):,' \
> $$ ( DEPROOT) /$( 3)
2009-03-22 02:20:15 +03:00
$$ ( VQ) echo " COMPILE: $( 1) "
2011-03-12 20:13:42 +03:00
$$ ( Q) $$ ( RM) $$ ( OBJROOT) /$( 2)
2016-06-06 16:47:27 +03:00
$$ ( Q) $$ ( CC) $$ ( COMMON_WARNFLAGS) $$ ( CWARNFLAGS) $$ ( IFLAGS) $$ ( CFLAGS) $( CFLAGS_ENV) -o $$ ( OBJROOT) /$( 2) -c $( 1)
2009-03-22 02:20:15 +03:00
e n d e f
e l s e
2007-12-23 00:15:58 +03:00
d e f i n e c o m p i l e _ t a r g e t _ c
2018-04-21 13:45:52 +03:00
$$ (OBJROOT)/$(2) : $( 1) $$( OBJROOT ) /created $$( DEPROOT ) /created
2007-12-23 00:15:58 +03:00
$$ ( VQ) echo " COMPILE: $( 1) "
2009-02-26 14:08:07 +03:00
$$ ( Q) $$ ( RM) $$ ( DEPROOT) /$( 3)
2011-03-12 20:13:42 +03:00
$$ ( Q) $$ ( RM) $$ ( OBJROOT) /$( 2)
2016-06-06 16:47:27 +03:00
$$ ( Q) $$ ( CC) $$ ( COMMON_WARNFLAGS) $$ ( CWARNFLAGS) $$ ( IFLAGS) $$ ( CFLAGS) $( CFLAGS_ENV) \
2014-09-05 19:01:44 +04:00
-MMD -MT '$$(DEPROOT)/$(3) $$(OBJROOT)/$(2)' \
2009-02-26 14:08:07 +03:00
-MF $$ ( DEPROOT) /$( 3) -o $$ ( OBJROOT) /$( 2) -c $( 1)
2007-12-23 00:15:58 +03:00
e n d e f
2009-03-22 02:20:15 +03:00
e n d i f
2007-12-23 00:15:58 +03:00
2008-06-04 00:13:34 +04:00
d e f i n e c o m p i l e _ t a r g e t _ c p p
2018-04-21 13:45:52 +03:00
$$ (OBJROOT)/$(2) : $( 1) $$( OBJROOT ) /created $$( DEPROOT ) /created
2009-03-30 03:32:02 +04:00
$$ ( VQ) echo " DEP: $( 1) "
$$ ( Q) $$ ( RM) $$ ( DEPROOT) /$( 3)
2016-06-06 16:47:27 +03:00
$$ ( Q) $$ ( CC) $$ ( IFLAGS) $$ ( CXXFLAGS) $$ ( COMMON_WARNFLAGS) $$ ( CXXWARNFLAGS) -MM \
2009-03-30 03:32:02 +04:00
$( 1) | sed 's,^.*:,$$(DEPROOT)/$(3) $$(OBJROOT)/$(2):,' \
> $$ ( DEPROOT) /$( 3)
2008-06-04 00:13:34 +04:00
$$ ( VQ) echo " COMPILE: $( 1) "
2011-03-12 20:13:42 +03:00
$$ ( Q) $$ ( RM) $$ ( OBJROOT) /$( 2)
2016-06-06 16:47:27 +03:00
$$ ( Q) $$ ( CXX) $$ ( COMMON_WARNFLAGS) $$ ( CXXWARNFLAGS) $$ ( IFLAGS) $$ ( CXXFLAGS) $( CXXFLAGS_ENV) -o $$ ( OBJROOT) /$( 2) -c $( 1)
2008-06-04 00:13:34 +04:00
e n d e f
2007-12-23 00:15:58 +03:00
# 1 = Source file
# 2 = obj filename, no prefix
# 3 = dep filename, no prefix
d e f i n e c o m p i l e _ t a r g e t _ s
2018-04-21 13:45:52 +03:00
$$ (OBJROOT)/$(2) : $( 1) $$( OBJROOT ) /created $$( DEPROOT ) /created
2008-07-30 00:55:26 +04:00
$$ ( VQ) echo " ASSEMBLE: $( 1) "
2009-02-26 14:08:07 +03:00
$$ ( Q) $$ ( RM) $$ ( DEPROOT) /$( 3)
2011-03-12 20:13:42 +03:00
$$ ( Q) $$ ( RM) $$ ( OBJROOT) /$( 2)
2009-02-26 14:08:07 +03:00
$$ ( Q) $$ ( CC) $$ ( ASFLAGS) -MMD -MT '$$(DEPROOT)/$(3) $$(OBJROOT)/$(2)' \
-MF $$ ( DEPROOT) /$( 3) -o $$ ( OBJROOT) /$( 2) -c $( 1)
2007-12-23 00:15:58 +03:00
e n d e f
# Rules to construct dep lines for each object...
$( eval $ ( foreach SOURCE ,$ ( filter %.c ,$ ( SOURCES ) ) , \
$( call dependency_generate_c,$( SOURCE) ,$( subst /,_,$( SOURCE:.c= .d) ) ,$( subst /,_,$( SOURCE:.c= .o) ) ) ) )
2008-06-04 00:13:34 +04:00
$( eval $ ( foreach SOURCE ,$ ( filter %.cpp ,$ ( SOURCES ) ) , \
$( call dependency_generate_c,$( SOURCE) ,$( subst /,_,$( SOURCE:.cpp= .d) ) ,$( subst /,_,$( SOURCE:.cpp= .o) ) ) ) )
2011-01-19 04:36:21 +03:00
$( eval $ ( foreach SOURCE ,$ ( filter %.m ,$ ( SOURCES ) ) , \
$( call dependency_generate_c,$( SOURCE) ,$( subst /,_,$( SOURCE:.m= .d) ) ,$( subst /,_,$( SOURCE:.m= .o) ) ) ) )
2007-12-23 00:15:58 +03:00
# Cannot currently generate dep files for S files because they're objasm
# when we move to gas format, we will be able to.
#$(eval $(foreach SOURCE,$(filter %.s,$(SOURCES)), \
# $(call dependency_generate_s,$(SOURCE),$(subst /,_,$(SOURCE:.s=.d)),$(subst /,_,$(SOURCE:.s=.o)))))
2015-07-09 00:17:20 +03:00
i f e q ( $( filter $ ( MAKECMDGOALS ) ,clean test coverage ) , )
2008-03-05 15:30:29 +03:00
- i n c l u d e $( sort $ ( addprefix $ ( DEPROOT ) /,$ ( DEPFILES ) ) )
2007-12-23 00:15:58 +03:00
e n d i f
# And rules to build the objects themselves...
$( eval $ ( foreach SOURCE ,$ ( filter %.c ,$ ( SOURCES ) ) , \
$( call compile_target_c,$( SOURCE) ,$( subst /,_,$( SOURCE:.c= .o) ) ,$( subst /,_,$( SOURCE:.c= .d) ) ) ) )
2008-06-04 00:13:34 +04:00
$( eval $ ( foreach SOURCE ,$ ( filter %.cpp ,$ ( SOURCES ) ) , \
$( call compile_target_cpp,$( SOURCE) ,$( subst /,_,$( SOURCE:.cpp= .o) ) ,$( subst /,_,$( SOURCE:.cpp= .d) ) ) ) )
2011-01-19 04:36:21 +03:00
$( eval $ ( foreach SOURCE ,$ ( filter %.m ,$ ( SOURCES ) ) , \
$( call compile_target_c,$( SOURCE) ,$( subst /,_,$( SOURCE:.m= .o) ) ,$( subst /,_,$( SOURCE:.m= .d) ) ) ) )
2007-12-23 00:15:58 +03:00
$( eval $ ( foreach SOURCE ,$ ( filter %.s ,$ ( SOURCES ) ) , \
$( call compile_target_s,$( SOURCE) ,$( subst /,_,$( SOURCE:.s= .o) ) ,$( subst /,_,$( SOURCE:.s= .d) ) ) ) )
2015-07-07 18:02:54 +03:00
# ----------------------------------------------------------------------------
# Test setup
# ----------------------------------------------------------------------------
i n c l u d e t e s t / M a k e f i l e
# ----------------------------------------------------------------------------
# Clean setup
# ----------------------------------------------------------------------------
.PHONY : clean
2007-12-23 00:15:58 +03:00
clean : $( CLEANS )
2008-03-09 20:06:45 +03:00
2015-07-07 18:02:54 +03:00
# ----------------------------------------------------------------------------
# build distribution package
# ----------------------------------------------------------------------------
.PHONY : package -$( TARGET ) package
2012-08-23 14:46:31 +04:00
package : all -program package -$( TARGET )
2009-04-17 19:25:02 +04:00
2013-04-29 01:09:03 +04:00
2015-07-07 18:02:54 +03:00
# ----------------------------------------------------------------------------
# local install on the host system
# ----------------------------------------------------------------------------
.PHONY : install install -$( TARGET )
install : all -program install -$( TARGET )
# ----------------------------------------------------------------------------
# Documentation build
# ----------------------------------------------------------------------------
.PHONY : docs
2017-06-09 19:28:55 +03:00
docs : docs /Doxyfile
2015-10-07 11:18:14 +03:00
doxygen $<
2015-07-07 18:02:54 +03:00
# ----------------------------------------------------------------------------
# Transifex message processing
# ----------------------------------------------------------------------------
2013-05-08 01:52:30 +04:00
.PHONY : messages -split -tfx messages -fetch -tfx messages -import -tfx
# split fat messages into properties files suitable for uploading to transifex
messages-split-tfx :
for splitlang in $( FAT_LANGUAGES) ; do perl ./utils/split-messages.pl -l $$ { splitlang} -f transifex -p any -o Messages.any.$$ { splitlang} .tfx resources/FatMessages; done
# download property files from transifex
messages-fetch-tfx :
for splitlang in $( FAT_LANGUAGES) ; do $( RM) Messages.any.$$ { splitlang} .tfx ; perl ./utils/fetch-transifex.pl -w insecure -l $$ { splitlang} -o Messages.any.$$ { splitlang} .tfx ; done
# merge property files into fat messages
messages-import-tfx : messages -fetch -tfx
for tfxlang in $( FAT_LANGUAGES) ; do perl ./utils/import-messages.pl -l $$ { tfxlang} -p any -f transifex -o resources/FatMessages -i resources/FatMessages -I Messages.any.$$ { tfxlang} .tfx ; $( RM) Messages.any.$$ { tfxlang} .tfx; done
2013-04-29 01:09:03 +04:00