зеркало из https://github.com/mozilla/pjs.git
276 строки
11 KiB
Makefile
276 строки
11 KiB
Makefile
# ***** BEGIN LICENSE BLOCK *****
|
|
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
#
|
|
# The contents of this file are subject to the Mozilla Public License Version
|
|
# 1.1 (the "License"); you may not use this file except in compliance with
|
|
# the License. You may obtain a copy of the License at
|
|
# http://www.mozilla.org/MPL/
|
|
#
|
|
# Software distributed under the License is distributed on an "AS IS" basis,
|
|
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
# for the specific language governing rights and limitations under the
|
|
# License.
|
|
#
|
|
# The Original Code is mozilla.org code.
|
|
#
|
|
# The Initial Developer of the Original Code is
|
|
# Netscape Communications.
|
|
# Portions created by the Initial Developer are Copyright (C) 2003
|
|
# the Initial Developer. All Rights Reserved.
|
|
#
|
|
# Contributor(s):
|
|
# Brian Ryner <bryner@brianryner.com>
|
|
# Mark Mentovai <mark@moxienet.com>
|
|
# Smokey Ardisson <alqahira@ardisson.org>
|
|
#
|
|
# Alternatively, the contents of this file may be used under the terms of
|
|
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
# in which case the provisions of the GPL or the LGPL are applicable instead
|
|
# of those above. If you wish to allow use of your version of this file only
|
|
# under the terms of either the GPL or the LGPL, and not to allow others to
|
|
# use your version of this file under the terms of the MPL, indicate your
|
|
# decision by deleting the provisions above and replace them with the notice
|
|
# and other provisions required by the GPL or the LGPL. If you do not delete
|
|
# the provisions above, a recipient may use your version of this file under
|
|
# the terms of any one of the MPL, the GPL or the LGPL.
|
|
#
|
|
# ***** END LICENSE BLOCK *****
|
|
|
|
DEPTH = ..
|
|
topsrcdir = @top_srcdir@
|
|
srcdir = @srcdir@
|
|
VPATH = @srcdir@
|
|
|
|
include $(DEPTH)/config/autoconf.mk
|
|
|
|
DIRS = \
|
|
flashblock \
|
|
idl \
|
|
striptease \
|
|
$(NULL)
|
|
|
|
APP_NAME = Camino
|
|
|
|
RSYNC_ALL = rsync -aC --exclude .cvsignore --delete
|
|
|
|
CM_APP_VERSION_FILE = $(srcdir)/config/version.txt
|
|
CM_APP_VERSION := $(shell cat $(CM_APP_VERSION_FILE))
|
|
CM_COPYRIGHT_YEAR_FILE = $(srcdir)/config/year.txt
|
|
CM_COPYRIGHT_YEAR := $(shell cat $(CM_COPYRIGHT_YEAR_FILE))
|
|
FOX_APP_VERSION_FILE = $(topsrcdir)/browser/config/version.txt
|
|
FOX_APP_VERSION := $(shell cat $(FOX_APP_VERSION_FILE))
|
|
PLATFORM_VERSION_FILE = $(topsrcdir)/config/milestone.txt
|
|
PLATFORM_VERSION := $(shell egrep "^[^\#]+" $(PLATFORM_VERSION_FILE))
|
|
PLATFORM_BUILD_ID_FILE = $(DEPTH)/config/buildid
|
|
PLATFORM_BUILD_ID := $(shell cat $(PLATFORM_BUILD_ID_FILE))
|
|
PLATFORM_INI_FILE = ../toolkit/xre/platform.ini
|
|
|
|
# For Launch Services compatibility, CFBundleVersion can be at most three
|
|
# .-separated integers, aaaaaa.bb.cc, with a maximum of 429496.99.99. Use
|
|
# Camino's major and minor version number and the build date as the basis for
|
|
# CFBundleVersion. This transforms version a.b (and any alphas, betas,
|
|
# prereleases, and bug-fix versions) built on date 20yy.mm.dd into
|
|
# CFBundleVersion abyy.mm.dd. Only a and b from the version need to be
|
|
# significant, since any further updates (a.b.c) will necessarily be built on
|
|
# future dates, and will have larger CFBundleVersion values. This mapping
|
|
# assumes 0 <= b <= 9 and is not year 2100-compliant. There is currently no
|
|
# CM_APP_VERSION_CFBUNDLE_FILE to depend on; any rule that uses this value
|
|
# should depend on CM_APP_VERSION_FILE and PLATFORM_BUILD_ID_FILE.
|
|
CM_APP_VERSION_CFBUNDLE := $(shell echo $(CM_APP_VERSION)@$(PLATFORM_BUILD_ID) | \
|
|
sed -E -e 's/^([0-9]+)\.([0-9]).*@[02]0([0-9]{2})([0-9]{2})([0-9]{2})[0-9]{2}$$/\1\2\3.\4.\5/')
|
|
|
|
# Info.plist needs to have keys for some values removed, instead of placing
|
|
# empty values. Start out with a pattern that doesn't exist to give something
|
|
# to append "or" regex clauses to.
|
|
GREP_V_PATTERN = __dummy__
|
|
|
|
# If a CVS tag (or branch) can be determined, use it as the CVS tag name in
|
|
# Info.plist. If no tag can be found, set up to remove the relevant key from
|
|
# Info.plist.
|
|
CVS_TAG_FILE = generated/cvs_tag
|
|
CVS_TAG := $(shell if [ -d $(srcdir)/CVS ] ; then \
|
|
if [ -f $(srcdir)/CVS/Tag ] ; then \
|
|
sed -e 's/^D.*/HEAD/' -e 's/^[NT]//' $(srcdir)/CVS/Tag ; \
|
|
else \
|
|
echo HEAD ; \
|
|
fi \
|
|
fi)
|
|
ifdef CVS_TAG
|
|
SED_ARGS += -e "s/%CVS_TAG%/$(CVS_TAG)/"
|
|
else # CVS_TAG
|
|
# Add the extra dummy pattern to ensure that make can't add whitespace to the
|
|
# strings we care about.
|
|
GREP_V_PATTERN += \|MozillaCVSTag\|%CVS_TAG%\|__dummy__
|
|
endif # CVS_TAG
|
|
|
|
# If MOZ_CO_DATE is set, use it as the CVS time in Info.plist. If it doesn't
|
|
# exist, set up to remove the relevant key from Info.plist.
|
|
CVS_TIME_FILE = generated/cvs_time
|
|
ifdef MOZ_CO_DATE
|
|
CVS_TIME := $(shell $(PERL) $(srcdir)/config/mozcodate2iso8601 "$(MOZ_CO_DATE)")
|
|
ifndef CVS_TIME
|
|
# Fail if the MOZ_CO_DATE format ever changes.
|
|
CVS_TIME := $(error mozcodate2iso8601)
|
|
endif # !CVS_TIME
|
|
SED_ARGS += -e "s/%CVS_TIME%/$(CVS_TIME)/"
|
|
else # MOZ_CO_DATE
|
|
# Add the extra dummy pattern to ensure that make can't add whitespace to the
|
|
# strings we care about.
|
|
GREP_V_PATTERN += \|MozillaCVSTime\|%CVS_TIME%\|__dummy__
|
|
endif # MOZ_CO_DATE
|
|
|
|
STRINGS_FILES = \
|
|
resources/localized/English.lproj/CertificateDialogs.strings \
|
|
resources/localized/English.lproj/Localizable.strings \
|
|
PreferencePanes/Appearance/English.lproj/Localizable.strings \
|
|
PreferencePanes/Appearance/English.lproj/RegionNames.strings \
|
|
PreferencePanes/Downloads/English.lproj/Localizable.strings \
|
|
PreferencePanes/General/English.lproj/Localizable.strings \
|
|
PreferencePanes/History/English.lproj/Localizable.strings \
|
|
PreferencePanes/Privacy/English.lproj/Localizable.strings \
|
|
PreferencePanes/Security/English.lproj/Localizable.strings \
|
|
PreferencePanes/Tabs/English.lproj/Localizable.strings \
|
|
PreferencePanes/WebFeatures/English.lproj/Localizable.strings \
|
|
$(NULL)
|
|
GENERATED_STRINGS_FILES = $(patsubst %,generated/%,$(STRINGS_FILES))
|
|
|
|
ifdef MOZ_DEBUG
|
|
BUILDSTYLE = Development
|
|
else
|
|
BUILDSTYLE = Deployment
|
|
endif
|
|
|
|
ifdef BUILD_STATIC_LIBS
|
|
TARGET = CaminoStatic
|
|
else
|
|
TARGET = Camino
|
|
endif
|
|
|
|
GARBAGE += \
|
|
$(PLATFORM_INI_FILE) \
|
|
$(DIST)/bin/platform.ini \
|
|
$(NULL)
|
|
|
|
GARBAGE_DIRS += \
|
|
build \
|
|
$(DIST)/$(APP_NAME).app \
|
|
embed-replacements.tmp \
|
|
generated \
|
|
sharedmenuscocoa/build \
|
|
sparkle/build \
|
|
$(NULL)
|
|
|
|
include $(topsrcdir)/config/rules.mk
|
|
|
|
unexport CC CXX
|
|
|
|
ABS_topsrcdir := $(shell cd $(topsrcdir); pwd)
|
|
|
|
export::
|
|
mkdir -p wallet/tables
|
|
ln -fs $(ABS_topsrcdir)/extensions/wallet/src/*.tbl wallet/tables
|
|
ifneq ($(ABS_topsrcdir),$(MOZ_BUILD_ROOT))
|
|
$(RSYNC_ALL) $(srcdir)/Camino.xcodeproj .
|
|
ln -fs $(srcdir)/src
|
|
ln -fs $(srcdir)/resources
|
|
ln -fs $(srcdir)/config
|
|
ln -fs $(srcdir)/PreferencePanes
|
|
ln -fs $(srcdir)/Info-*.plist .
|
|
mkdir -p sharedmenuscocoa sparkle
|
|
bash -O extglob -c \
|
|
"ln -fs $(ABS_topsrcdir)/camino/sharedmenuscocoa/!(CVS|*.xcodeproj|build) sharedmenuscocoa"
|
|
$(RSYNC_ALL) $(ABS_topsrcdir)/camino/sharedmenuscocoa/*.xcodeproj sharedmenuscocoa
|
|
bash -O extglob -c \
|
|
"ln -fs $(ABS_topsrcdir)/camino/sparkle/!(CVS|*.xcodeproj|build) sparkle"
|
|
$(RSYNC_ALL) $(ABS_topsrcdir)/camino/sparkle/*.xcodeproj sparkle
|
|
endif
|
|
|
|
# Generate files which need to pull version numbers or dates from other files
|
|
# in the tree
|
|
generated/resources/application/all-camino.js: \
|
|
$(srcdir)/resources/application/all-camino.js.in \
|
|
$(FOX_APP_VERSION_FILE) \
|
|
$(CM_APP_VERSION_FILE)
|
|
mkdir -p $(dir $@)
|
|
sed -e "s/%FOX_APP_VERSION%/$(FOX_APP_VERSION)/" \
|
|
-e "s/%CM_APP_VERSION%/$(CM_APP_VERSION)/" $< > $@
|
|
|
|
generated/Info-Camino.plist: \
|
|
$(srcdir)/Info-Camino.plist.in \
|
|
$(CM_APP_VERSION_FILE) \
|
|
$(CM_COPYRIGHT_YEAR_FILE) \
|
|
$(PLATFORM_BUILD_ID_FILE) \
|
|
$(PLATFORM_VERSION_FILE) \
|
|
$(CVS_TAG_FILE) \
|
|
$(CVS_TIME_FILE)
|
|
mkdir -p $(dir $@)
|
|
sed -e "s/%CM_APP_VERSION%/$(CM_APP_VERSION)/" \
|
|
-e "s/%CM_APP_VERSION_CFBUNDLE%/$(CM_APP_VERSION_CFBUNDLE)/" \
|
|
-e "s/%CM_COPYRIGHT_YEAR%/$(CM_COPYRIGHT_YEAR)/" \
|
|
-e "s/%PLATFORM_BUILD_ID%/$(PLATFORM_BUILD_ID)/" \
|
|
-e "s/%PLATFORM_VERSION%/$(PLATFORM_VERSION)/" \
|
|
$(SED_ARGS) $< | \
|
|
grep -v "$(GREP_V_PATTERN)" > $@
|
|
|
|
generated/resources/localized/English.lproj/InfoPlist.strings: \
|
|
$(srcdir)/resources/localized/English.lproj/InfoPlist.strings.in \
|
|
$(CM_APP_VERSION_FILE) \
|
|
$(CM_COPYRIGHT_YEAR_FILE)
|
|
mkdir -p $(dir $@)
|
|
sed -e "s/%CM_APP_VERSION%/$(CM_APP_VERSION)/" \
|
|
-e "s/%CM_COPYRIGHT_YEAR%/$(CM_COPYRIGHT_YEAR)/" $< | \
|
|
iconv -f UTF-8 -t UTF-16 > $@
|
|
|
|
# Generate UTF-16 with BOM strings files from UTF-8 strings.in files. On Mac
|
|
# OS X, iconv seems always to output big-endian when asked for UTF-16 with a
|
|
# BOM, which is what AppleGlot seems to require.
|
|
$(GENERATED_STRINGS_FILES): \
|
|
generated/%.strings: $(srcdir)/%.strings.in
|
|
mkdir -p $(dir $@)
|
|
iconv -f UTF-8 -t UTF-16 $< > $@
|
|
|
|
# The "grep -lFx" construct in these rules will only touch the file if the
|
|
# contents are changing. The file's timestamp will be preserved when the
|
|
# contents aren't changing, reducing unnecessary build activity.
|
|
|
|
$(CVS_TAG_FILE): FORCE
|
|
grep -lFx "$(CVS_TAG)" $@ >& /dev/null || \
|
|
(mkdir -p $(dir $@) && echo "$(CVS_TAG)" > $@)
|
|
|
|
$(CVS_TIME_FILE): FORCE
|
|
grep -lFx "$(CVS_TIME)" $@ >& /dev/null || \
|
|
(mkdir -p $(dir $@) && echo "$(CVS_TIME)" > $@)
|
|
|
|
# Put platform.ini into toolkit/xre and dist/bin, because that's where
|
|
# Tinderbox looks to figure out the build ID. It currently doesn't need
|
|
# to be distributed with the application.
|
|
$(PLATFORM_INI_FILE): $(PLATFORM_BUILD_ID_FILE) $(PLATFORM_VERSION_FILE)
|
|
mkdir -p $(dir $@)
|
|
echo [Build] > $@
|
|
echo BuildID=$(PLATFORM_BUILD_ID) >> $@
|
|
echo Milestone=$(PLATFORM_VERSION) >> $@
|
|
$(INSTALL) $@ $(DIST)/bin
|
|
|
|
# The embed-replacements rsync is done for both srcdir and objdir builds
|
|
# to avoid adding CVS stuff to embed.jar.
|
|
libs:: \
|
|
generated/resources/application/all-camino.js \
|
|
generated/Info-Camino.plist \
|
|
generated/resources/localized/English.lproj/InfoPlist.strings \
|
|
$(GENERATED_STRINGS_FILES) \
|
|
$(PLATFORM_INI_FILE)
|
|
$(RSYNC_ALL) $(srcdir)/embed-replacements/ embed-replacements.tmp
|
|
cd embed-replacements.tmp && \
|
|
$(ZIP) -r0DX ../../dist/Embed/chrome/embed.jar *
|
|
$(PBBUILD) -project Camino.xcodeproj -target $(TARGET) \
|
|
-configuration $(BUILDSTYLE) $(PBBUILD_SETTINGS)
|
|
$(RSYNC_ALL) --copy-unsafe-links \
|
|
$(XCODE_PRODUCT_DIR)/Camino.app/ $(DIST)/$(APP_NAME).app
|
|
$(RM) $(DIST)/$(APP_NAME).app/Contents/MacOS/components/camino.xpt
|
|
$(XPIDL_LINK) $(DIST)/$(APP_NAME).app/Contents/MacOS/camino.xpt \
|
|
$(DIST)/$(APP_NAME).app/Contents/MacOS/components/*.xpt
|
|
$(RM) $(DIST)/$(APP_NAME).app/Contents/MacOS/components/*.xpt
|
|
mv $(DIST)/$(APP_NAME).app/Contents/MacOS/camino.xpt \
|
|
$(DIST)/$(APP_NAME).app/Contents/MacOS/components/camino.xpt
|