1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423
|
# -*-makefile-*-
# Shared/bundle.make
#
# Makefile fragment with rules to copy resource files
# into a local bundle
#
# Copyright (C) 2002 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# input variables:
#
#
# GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH : this is used when copying
# resource files into the bundle. It's the path to the local resource
# bundle where all resources will be put (this might be a subdirectory
# of the actual bundle directory). This path must include
# GNUSTEP_BUILD_DIR. Resource files will be copied into this path.
# For example, for a normal bundle it would be
# $(BUNDLE_DIR)/Resources; for an application it would be
# $(APP_DIR)/Resources; for a library or a tool,
# $(GNUSTEP_BUILD_DIR)/Resources/$(GNUSTEP_INSTANCE). This variable
# is used during build, to copy the resources in place.
#
# GNUSTEP_BUILD_DIR : Implicitly used to find the bundle.
#
# GNUSTEP_SHARED_BUNDLE_INSTALL_NAME : this is used when installing.
# It's the name of the directory that is installed. For example, for
# a normal bundle it would be $(BUNDLE_DIR_NAME); for an application
# it would be $(APP_DIR_NAME); for a tool $(GNUSTEP_INSTANCE); for a
# library, $(INTERFACE_VERSION).
#
# GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH : this is used when
# installing. It's the path to the directory that contains
# GNUSTEP_SHARED_BUNDLE_INSTALL_NAME, but relative to
# GNUSTEP_BUILD_DIR. For example, for a normal bundle or an
# application this is simply ./; for a tool this is ./Resources; for a
# library this is ./Resources/$(GNUSTEP_INSTANCE). This is relative
# to GNUSTEP_BUILD_DIR so that it can be used by COPY_INTO_DIR as
# well. When we are asked to COPY_INTO_DIR (instead of the standard
# installation) then we copy the stuff from
# GNUSTEP_BUILD_DIR/GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH into
# COPY_INTO_DIR/GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH. This works
# well for tool resources, for example, so that when you copy a tool
# with resources into a framework, the tool resources and the tool
# executable remain in the same relative relationship and tool
# resources can be found.
#
# GNUSTEP_SHARED_BUNDLE_INSTALL_PATH : this is used when installing.
# It's the path where we install the bundle; that is, we will take
# GNUSTEP_SHARED_BUNDLE_INSTALL_NAME from
# GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH and install it into
# GNUSTEP_SHARED_BUNDLE_INSTALL_PATH. For example, for a normal
# bundle it would be $(BUNDLE_INSTALL_DIR); for an application it
# would be $(APP_INSTALL_DIR); for a tool, $(GNUSTEP_TOOL_RESOURCES);
# for a library $(GNUSTEP_RESOURCES)/$(GNUSTEP_INSTANCE).
#
# Please note that the main constraint when installing is that your
# local bundle should have the same name that it has when installed.
# Paths can be changed arbitrarily though.
#
# $(GNUSTEP_INSTANCE)_RESOURCE_FILES : a list of resource files to install.
# They are recursively copied (/symlinked), so it might also include dirs.
#
# $(GNUSTEP_INSTANCE)_RESOURCE_DIRS : a list of additional resource dirs
# to create.
#
# $(GNUSTEP_INSTANCE)_LANGUAGES : the list of languages of localized resource
# files
#
# $(GNUSTEP_INSTANCE)_LOCALIZED_RESOURCE_FILES : a list of localized
# resource files to install.
#
# $(GNUSTEP_INSTANCE)_LOCALIZED_RESOURCE_DIRS : a list of additional localized
# resource dirs to create.
#
# $(GNUSTEP_INSTANCE)_COMPONENTS : a list of directories which are
# recursively copied (/locally symlinked if symlinks are available)
# into the resource bundle. Basically, they are currently added to
# $(GNUSTEP_INSTANCE)_RESOURCE_FILES.
#
# $(GNUSTEP_INSTANCE)_LOCALIZED_COMPONENTS : a list of localized
# directories which are recursively copied (/locally symlinked if
# symlinks are available) into the resource bundle. Currently, they
# are simply added to $(GNUSTEP_INSTANCE)_LOCALIZED_RESOURCE_FILES.
#
# $(GNUSTEP_INSTANCE)_SUBPROJECTS : the list of subprojects is used
# because the resources from each subproject are merged into the bundle
# resources (by recursively copying from LLL/Resources/Subproject into
# the GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH, where $(LLL) is the
# subproject name.
#
# GNUSTEP_TYPE : used when printing the message 'Copying resources into
# the $(GNUSTEP_TYPE) wrapper...'
#
# GSWeb related variables -
#
# $(GNUSTEP_INSTANCE)_WEBSERVER_RESOURCE_FILES : a list of resource files to
# copy from the WebServerResources directory into the WebServer
# subdirectory of the resource bundle
#
# $(GNUSTEP_INSTANCE)_WEBSERVER_LOCALIZED_RESOURCE_FILES : a list of
# localized resource files to copy from the yyy.lproj subdir of the
# WebServerResources directory into the yyy.lproj subdir of the
# WebServer subdirectory of the resource bundle - this for each
# language yyy.
#
# $(GNUSTEP_INSTANCE)_WEBSERVER_COMPONENTS:
# $(GNUSTEP_INSTANCE)_WEBSERVER_LOCALIZED_COMPONENTS:
# $(GNUSTEP_INSTANCE)_WEBSERVER_RESOURCE_DIRS:
# $(GNUSTEP_INSTANCE)_WEBSERVER_LOCALIZED_RESOURCE_DIRS:
#
#
# public targets:
#
# shared-instance-bundle-all
#
# $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH): Creates the bundle
# resource path (invoked automatically)
#
# shared-instance-bundle-install
# shared-instance-bundle-uninstall
# shared-instance-bundle-copy_into_dir
#
#
# Warning - the bundle install rules depend on the rule to create
# $(GNUSTEP_SHARED_BUNDLE_INSTALL_PATH) - the rule to build it has to be
# provided by the caller {we can't provide two rules to build the same
# target; the caller might need to provide the rule for cases when we
# are not included, so we let the caller always provide it}
#
RESOURCE_FILES = $(strip $($(GNUSTEP_INSTANCE)_RESOURCE_FILES) \
$($(GNUSTEP_INSTANCE)_COMPONENTS))
RESOURCE_DIRS = $(strip $($(GNUSTEP_INSTANCE)_RESOURCE_DIRS))
LANGUAGES = $(strip $($(GNUSTEP_INSTANCE)_LANGUAGES))
LOCALIZED_RESOURCE_FILES = \
$(strip $($(GNUSTEP_INSTANCE)_LOCALIZED_RESOURCE_FILES) \
$($(GNUSTEP_INSTANCE)_LOCALIZED_COMPONENTS))
LOCALIZED_RESOURCE_DIRS = \
$(strip $($(GNUSTEP_INSTANCE)_LOCALIZED_RESOURCE_DIRS))
# NB: Use _SUBPROJECTS, not SUBPROJECTS here as that might conflict
# with what is used in aggregate.make.
_SUBPROJECTS = $(strip $($(GNUSTEP_INSTANCE)_SUBPROJECTS))
.PHONY: \
shared-instance-bundle-all \
shared-instance-bundle-all-resources \
shared-instance-bundle-all-gsweb \
shared-instance-bundle-install \
shared-instance-bundle-uninstall \
shared-instance-bundle-copy_into_dir
ifneq ($(RESOURCE_DIRS),)
FULL_RESOURCE_DIRS = \
$(foreach d, $(RESOURCE_DIRS), $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/$(d))
endif
ifeq ($(LANGUAGES),)
LANGUAGES = English
endif
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
$(FULL_RESOURCE_DIRS):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
#
# We provide two different ways of building bundles, suited to
# different usages - normal user and developer.
#
# `Normal user` builds the bundle once. We optimize for single-build
# in this case.
#
# `Developer` builds and rebuilds the bundle a lot of times with minor
# changes each time. We optimize for efficient rebuilding in this
# case.
#
# The default behaviour is 'Normal user'. To switch to 'Developer'
# mode, set GNUSTEP_DEVELOPER=YES in the environment.
#
# TODO - implement the `Developer` mode :-)
#
# Please note the trick when copying subproject resources - if there
# is nothing inside $$subproject/Resources/Subproject/, in
# $$subproject/Resources/Subproject/* the * expands to itself. So we
# check if that is true before trying to copy.
# Please note that if xxx/yyy is specified in RESOURCE_FILES, we
# create the file {bundle}/yyy (not {bundle}/xxx/yyy), because people
# usually can put resource files in subdirs, and want to copy them
# just top-level. That is what currently happens, but often enough
# you might want the other behaviour ({bundle}/xxx/yyy to be created),
# and TODO: devise a way to support it.
#
# If instead xxx/yyy is specified in LOCALIZED_RESOURCE_FILES, we
# create the file {bundle}/Language.lproj/xxx/yyy, because we want to
# mirror the Language.lproj directory faithfully. There is no
# possible confusion here.
#
# Important: we pass the '-f' argument to 'cp' to make sure that you
# can write and overwrite RESOURCE_FILES which are -r--r--r--.
#
shared-instance-bundle-all: $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH) \
$(FULL_RESOURCE_DIRS) \
shared-instance-bundle-all-gsweb
ifneq ($(RESOURCE_FILES),)
$(ECHO_COPYING_RESOURCES)for f in $(RESOURCE_FILES); do \
if [ -f $$f -o -d $$f ]; then \
cp -fr $$f $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/; \
else \
echo "Warning: $$f not found - ignoring"; \
fi; \
done$(END_ECHO)
endif
ifneq ($(LOCALIZED_RESOURCE_DIRS),)
$(ECHO_CREATING_LOC_RESOURCE_DIRS)for l in $(LANGUAGES); do \
if [ -d $$l.lproj ]; then \
$(MKDIRS) $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/$$l.lproj; \
for f in $(LOCALIZED_RESOURCE_DIRS); do \
$(MKDIRS) $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/$$l.lproj/$$f; \
done; \
else \
echo "Warning: $$l.lproj not found - ignoring"; \
fi; \
done$(END_ECHO)
endif
ifneq ($(LOCALIZED_RESOURCE_FILES),)
$(ECHO_COPYING_LOC_RESOURCES)for l in $(LANGUAGES); do \
if [ -d $$l.lproj ]; then \
$(MKDIRS) $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/$$l.lproj; \
for f in $(LOCALIZED_RESOURCE_FILES); do \
if [ -f $$l.lproj/$$f -o -d $$l.lproj/$$f ]; then \
cp -fr $$l.lproj/$$f \
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/$$l.lproj/; \
else \
echo "Warning: $$l.lproj/$$f not found - ignoring"; \
fi; \
done; \
else \
echo "Warning: $$l.lproj not found - ignoring"; \
fi; \
done$(END_ECHO)
endif
ifneq ($(_SUBPROJECTS),)
$(ECHO_COPYING_RESOURCES_FROM_SUBPROJS)for subproject in $(_SUBPROJECTS); do \
if [ -d $$subproject/Resources/Subproject ]; then \
for f in $$subproject/Resources/Subproject/*; do \
if [ $$f != $$subproject'/Resources/Subproject/*' ]; then \
cp -fr $$f $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/; \
fi; \
done; \
fi; \
done$(END_ECHO)
endif
##
##
## GSWeb code
## A main issue here is - executing *nothing* if gsweb is not used :-)
##
##
WEBSERVER_RESOURCE_FILES = \
$(strip $($(GNUSTEP_INSTANCE)_WEBSERVER_RESOURCE_FILES) \
$($(GNUSTEP_INSTANCE)_WEBSERVER_COMPONENTS))
# For historical reasons, we recognized the old variant
# xxx_LOCALIZED_WEBSERVER_RESOURCE_FILES - but we recommend to use
# xxx_WEBSERVER_LOCALIZED_RESOURCE_FILES instead.
WEBSERVER_LOCALIZED_RESOURCE_FILES = \
$(strip $($(GNUSTEP_INSTANCE)_LOCALIZED_WEBSERVER_RESOURCE_FILES) \
$($(GNUSTEP_INSTANCE)_WEBSERVER_LOCALIZED_RESOURCE_FILES) \
$($(GNUSTEP_INSTANCE)_WEBSERVER_LOCALIZED_COMPONENTS))
WEBSERVER_RESOURCE_DIRS = \
$(strip $($(GNUSTEP_INSTANCE)_WEBSERVER_RESOURCE_DIRS))
WEBSERVER_LOCALIZED_RESOURCE_DIRS = \
$(strip $($(GNUSTEP_INSTANCE)_WEBSERVER_LOCALIZED_RESOURCE_DIRS))
ifneq ($(WEBSERVER_RESOURCE_DIRS),)
WEBSERVER_FULL_RESOURCE_DIRS = \
$(foreach d, $(WEBSERVER_RESOURCE_DIRS), $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer/$(d))
$(WEBSERVER_FULL_RESOURCE_DIRS):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
endif
.PHONY: shared-instance-bundle-all-webresources \
shared-instance-bundle-all-localized-webresources
shared-instance-bundle-all-gsweb: shared-instance-bundle-all-webresources \
shared-instance-bundle-all-localized-webresources
ifneq ($(WEBSERVER_RESOURCE_FILES),)
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer:
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
shared-instance-bundle-all-webresources: \
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer \
$(WEBSERVER_FULL_RESOURCE_DIRS)
$(ECHO_COPYING_WEBSERVER_RESOURCES)for f in $(WEBSERVER_RESOURCE_FILES); do \
if [ -f ./WebServerResources/$$f \
-o -d ./WebServerResources/$$f ]; then \
cp -fr ./WebServerResources/$$f \
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer/$$f; \
else \
echo "Warning: WebServerResources/$$f not found - ignoring"; \
fi; \
done$(END_ECHO)
else
shared-instance-bundle-all-webresources:
endif
ifneq ($(WEBSERVER_LOCALIZED_RESOURCE_FILES)$(WEBSERVER_LOCALIZED_RESOURCE_DIRS),)
shared-instance-bundle-all-localized-webresources: \
$(WEBSERVER_FULL_RESOURCE_DIRS)
ifneq ($(WEBSERVER_LOCALIZED_RESOURCE_DIRS),)
$(ECHO_CREATING_WEBSERVER_LOC_RESOURCE_DIRS)for l in $(LANGUAGES); do \
if [ -d ./WebServerResources/$$l.lproj ]; then \
$(MKDIRS) \
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer/$$l.lproj; \
for f in $(WEBSERVER_LOCALIZED_RESOURCE_DIRS); do \
$(MKDIRS) \
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer/$$l.lproj/$$f; \
done; \
else \
echo "Warning: WebServer/$$l.lproj not found - ignoring"; \
fi; \
done$(END_ECHO)
endif
ifneq ($(WEBSERVER_LOCALIZED_RESOURCE_FILES),)
$(ECHO_COPYING_WEBSERVER_LOC_RESOURCES)for l in $(LANGUAGES); do \
if [ -d ./WebServerResources/$$l.lproj ]; then \
$(MKDIRS) \
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer/$$l.lproj;\
for f in $(WEBSERVER_LOCALIZED_RESOURCE_FILES); do \
if [ -f ./WebServerResources/$$l.lproj/$$f \
-o -d ./WebServerResources/$$l.lproj/$$f ]; then \
cp -fr ./WebServerResources/$$l.lproj/$$f \
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer/$$l.lproj/$$f; \
else \
echo "Warning: WebServerResources/$$l.lproj/$$f not found - ignoring"; \
fi; \
done; \
else \
echo "Warning: WebServerResources/$$l.lproj not found - ignoring"; \
fi; \
done$(END_ECHO)
endif
else
shared-instance-bundle-all-localized-webresources:
endif
# In the following rule, tar has the 'h' option, which dereferences
# symbolic links. The idea is that you could specify symbolic links
# to some templates as some of the resource files; then building the
# bundle is quick, because you only copy the symlinks - not the actual
# files; and the symlinks are dereferenced when the bundle is
# installed (which is why the 'h' option is there). I've never used
# this feature, but it was requested by some of our users.
#
# Another common request is to ignore/drop CVS and .svn
# directories/files from the bundle when installing. You don't really
# want to install those in case they ended up in the bundle when you
# recursively copied some resources in it from your source code.
# This is obtained by using the 'X' flag.
#
# Because of compatibility issues with older versions of GNU tar (not
# to speak of non-GNU tars), we use the X option rather than the
# --exclude= option. The X option requires as argument a file listing
# files to exclude. We use a standard exclude file list which we store
# in GNUSTEP_MAKEFILES.
#
shared-instance-bundle-install:: $(GNUSTEP_SHARED_BUNDLE_INSTALL_PATH)
$(ECHO_INSTALLING_BUNDLE)rm -rf $(GNUSTEP_SHARED_BUNDLE_INSTALL_PATH)/$(GNUSTEP_SHARED_BUNDLE_INSTALL_NAME); \
(cd $(GNUSTEP_BUILD_DIR)/$(GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH); \
$(TAR) chfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list $(GNUSTEP_SHARED_BUNDLE_INSTALL_NAME)) \
| (cd $(GNUSTEP_SHARED_BUNDLE_INSTALL_PATH); $(TAR) xf -)$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) \
$(GNUSTEP_SHARED_BUNDLE_INSTALL_PATH)/$(GNUSTEP_SHARED_BUNDLE_INSTALL_NAME)$(END_ECHO)
endif
shared-instance-bundle-copy_into_dir::
$(ECHO_COPYING_BUNDLE_INTO_DIR)rm -rf $(COPY_INTO_DIR)/$(GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH)/$(GNUSTEP_SHARED_BUNDLE_INSTALL_NAME); \
(cd $(GNUSTEP_BUILD_DIR); \
$(TAR) chfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list $(GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH)/$(GNUSTEP_SHARED_BUNDLE_INSTALL_NAME)) \
| (cd $(COPY_INTO_DIR); $(TAR) xf -)$(END_ECHO)
shared-instance-bundle-uninstall::
$(ECHO_NOTHING)cd $(GNUSTEP_SHARED_BUNDLE_INSTALL_PATH); rm -rf $(GNUSTEP_SHARED_BUNDLE_INSTALL_NAME)$(END_ECHO)
|