]> err.no Git - sope/blob - sope-appserver/NGObjWeb/wobundle-gs.make
major improvements in resource/template lookup with SoProduct's
[sope] / sope-appserver / NGObjWeb / wobundle-gs.make
1 #
2 #   wobundle.make
3 #
4 #   Makefile rules to build GNUstep web bundles.
5 #
6 #   Copyright (C) 2002 Free Software Foundation, Inc.
7 #
8 #   Author:  Nicola Pero <nicola@brainstorm.co.uk>
9 #
10 #   This file is part of the GNUstep Makefile Package.
11 #
12 #   This library is free software; you can redistribute it and/or
13 #   modify it under the terms of the GNU General Public License
14 #   as published by the Free Software Foundation; either version 2
15 #   of the License, or (at your option) any later version.
16 #   
17 #   You should have received a copy of the GNU General Public
18 #   License along with this library; see the file COPYING.LIB.
19 #   If not, write to the Free Software Foundation,
20 #   59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21
22 ifeq ($(GNUSTEP_INSTANCE),)
23 ifeq ($(RULES_MAKE_LOADED),)
24 include $(GNUSTEP_MAKEFILES)/rules.make
25 endif
26
27 ifeq ($(strip $(WOBUNDLE_EXTENSION)),)
28 WOBUNDLE_EXTENSION = .wobundle
29 endif
30
31 WOBUNDLE_NAME := $(strip $(WOBUNDLE_NAME))
32
33 internal-all:: $(WOBUNDLE_NAME:=.all.wobundle.variables)
34
35 internal-install:: $(WOBUNDLE_NAME:=.install.wobundle.variables)
36
37 internal-uninstall:: $(WOBUNDLE_NAME:=.uninstall.wobundle.variables)
38
39 internal-clean:: $(WOBUNDLE_NAME:=.clean.wobundle.subprojects)
40         rm -rf $(GNUSTEP_OBJ_DIR) \
41                $(addsuffix $(WOBUNDLE_EXTENSION),$(WOBUNDLE_NAME))
42
43 internal-distclean:: $(WOBUNDLE_NAME:=.distclean.wobundle.subprojects)
44         rm -rf shared_obj static_obj shared_debug_obj shared_profile_obj \
45           static_debug_obj static_profile_obj shared_profile_debug_obj \
46           static_profile_debug_obj
47
48 $(WOBUNDLE_NAME):
49         @$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
50                 $@.all.wobundle.variables
51 else
52
53 ifeq ($(GNUSTEP_TYPE),wobundle)
54 ifeq ($(RULES_MAKE_LOADED),)
55 include $(GNUSTEP_MAKEFILES)/rules.make
56 endif
57
58 # FIXME - this file has not been updated to use Shared/bundle.make
59 # because it is using symlinks rather than copying resources.
60
61 COMPONENTS = $($(GNUSTEP_INSTANCE)_COMPONENTS)
62 LANGUAGES = $($(GNUSTEP_INSTANCE)_LANGUAGES)
63 WEBSERVER_RESOURCE_FILES = $($(GNUSTEP_INSTANCE)_WEBSERVER_RESOURCE_FILES)
64 LOCALIZED_WEBSERVER_RESOURCE_FILES = $($(GNUSTEP_INSTANCE)_LOCALIZED_WEBSERVER_RESOURCE_FILES)
65 WEBSERVER_RESOURCE_DIRS = $($(GNUSTEP_INSTANCE)_WEBSERVER_RESOURCE_DIRS)
66 LOCALIZED_RESOURCE_FILES = $($(GNUSTEP_INSTANCE)_LOCALIZED_RESOURCE_FILES)
67 RESOURCE_FILES = $($(GNUSTEP_INSTANCE)_RESOURCE_FILES)
68 RESOURCE_DIRS = $($(GNUSTEP_INSTANCE)_RESOURCE_DIRS)
69
70 include $(GNUSTEP_MAKEFILES)/Instance/Shared/headers.make
71
72 ifeq ($(strip $(WOBUNDLE_EXTENSION)),)
73 WOBUNDLE_EXTENSION = .wobundle
74 endif
75
76 WOBUNDLE_LD = $(BUNDLE_LD)
77 WOBUNDLE_LDFLAGS = $(BUNDLE_LDFLAGS)
78
79 ifeq ($(FOUNDATION_LIB),apple)
80 WORSRCDIRINFIX:=Contents/Resources
81 WORSRCLINKUP:=../../..
82 else
83 WORSRCDIRINFIX:=Resources
84 WORSRCLINKUP:=../..
85 endif
86
87 ifeq ($(WOBUNDLE_INSTALL_DIR),)
88 WOBUNDLE_INSTALL_DIR = $(GNUSTEP_INSTALLATION_DIR)/Libraries
89 endif
90 # The name of the bundle is in the BUNDLE_NAME variable.
91 # The list of languages the bundle is localized in are in xxx_LANGUAGES
92 # The list of bundle resource file are in xxx_RESOURCE_FILES
93 # The list of localized bundle resource file are in xxx_LOCALIZED_RESOURCE_FILES
94 # The list of bundle resource directories are in xxx_RESOURCE_DIRS
95 # The name of the principal class is xxx_PRINCIPAL_CLASS
96 # The header files are in xxx_HEADER_FILES
97 # The directory where the header files are located is xxx_HEADER_FILES_DIR
98 # The directory where to install the header files inside the library
99 # installation directory is xxx_HEADER_FILES_INSTALL_DIR
100 # where xxx is the bundle name
101 #  xxx_WEBSERVER_RESOURCE_DIRS <==
102 # The list of localized application web server resource directories are in 
103 #  xxx_LOCALIZED_WEBSERVER_RESOURCE_DIRS
104 # where xxx is the application name <==
105
106 .PHONY: internal-wobundle-all_ \
107         internal-wobundle-install_ \
108         internal-wobundle-uninstall_ \
109         build-bundle-dir \
110         build-bundle \
111         wobundle-components \
112         wobundle-resource-files \
113         wobundle-localized-resource-files \
114         wobundle-webresource-dir \
115         wobundle-webresource-files \
116         wobundle-localized-webresource-files
117
118 # On Solaris we don't need to specifies the libraries the bundle needs.
119 # How about the rest of the systems? ALL_BUNDLE_LIBS is temporary empty.
120 TALL_WOBUNDLE_LIBS = $(ADDITIONAL_WO_LIBS) $(AUXILIARY_WO_LIBS) $(WO_LIBS) \
121         $(ADDITIONAL_BUNDLE_LIBS) $(AUXILIARY_BUNDLE_LIBS) \
122         $(FND_LIBS) $(ADDITIONAL_OBJC_LIBS) $(AUXILIARY_OBJC_LIBS) \
123         $(OBJC_LIBS) $(SYSTEM_LIBS) $(TARGET_SYSTEM_LIBS)
124 #ALL_WOBUNDLE_LIBS = 
125 ALL_WOBUNDLE_LIBS = \
126     $(shell $(WHICH_LIB_SCRIPT) $(ALL_LIB_DIRS) $(TALL_WOBUNDLE_LIBS) \
127         debug=$(debug) profile=$(profile) shared=$(shared) libext=$(LIBEXT) \
128         shared_libext=$(SHARED_LIBEXT))
129
130 internal-wobundle-all_:: $(GNUSTEP_OBJ_DIR) \
131                           build-bundle-dir \
132                           build-bundle
133
134 WOBUNDLE_DIR_NAME = $(GNUSTEP_INSTANCE:=$(WOBUNDLE_EXTENSION))
135 WOBUNDLE_FILE = \
136     $(WOBUNDLE_DIR_NAME)/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE)
137 WOBUNDLE_RESOURCE_DIRS = $(foreach d, $(RESOURCE_DIRS), $(WOBUNDLE_DIR_NAME)/$(WORSRCDIRINFIX)/$(d))
138 WOBUNDLE_WEBSERVER_RESOURCE_DIRS =  $(foreach d, $(WEBSERVER_RESOURCE_DIRS), $(WOBUNDLE_DIR_NAME)/Resources/WebServer/$(d))
139
140 ifeq ($(strip $(LANGUAGES)),)
141   LANGUAGES="English"
142 endif
143
144
145 build-bundle-dir:: $(WOBUNDLE_DIR_NAME)/$(WORSRCDIRINFIX) \
146                    $(WOBUNDLE_DIR_NAME)/$(GNUSTEP_TARGET_LDIR) \
147                    $(WOBUNDLE_RESOURCE_DIRS)
148
149 $(WOBUNDLE_DIR_NAME)/$(GNUSTEP_TARGET_LDIR):
150         @$(MKDIRS) $(WOBUNDLE_DIR_NAME)/$(GNUSTEP_TARGET_LDIR)
151
152 $(WOBUNDLE_RESOURCE_DIRS):
153         @$(MKDIRS) $(WOBUNDLE_RESOURCE_DIRS)
154
155 build-bundle:: $(WOBUNDLE_FILE) \
156                wobundle-components \
157                wobundle-resource-files \
158                wobundle-localized-resource-files \
159                wobundle-localized-webresource-files \
160                wobundle-webresource-files
161
162
163 $(WOBUNDLE_FILE) : $(OBJ_FILES_TO_LINK)
164         $(WOBUNDLE_LD) $(WOBUNDLE_LDFLAGS) \
165                         $(ALL_LDFLAGS) -o $(LDOUT)$(WOBUNDLE_FILE) \
166                         $(OBJ_FILES_TO_LINK) \
167                         $(ALL_WOBUNDLE_LIBS)
168
169 wobundle-components :: $(WOBUNDLE_DIR_NAME)
170 ifneq ($(strip $(COMPONENTS)),)
171         @(echo "Linking components into the bundle wrapper..."; \
172         cd $(WOBUNDLE_DIR_NAME)/$(WORSRCDIRINFIX); \
173         for component in $(COMPONENTS); do \
174           if [ -d $(WORSRCLINKUP)/$$component ]; then \
175             $(LN_S) -f $(WORSRCLINKUP)/$$component ./;\
176           fi; \
177         done; \
178         echo "Linking localized components into the bundle wrapper..."; \
179         for l in $(LANGUAGES); do \
180           if [ -d $(WORSRCLINKUP)/$$l.lproj ]; then \
181             $(MKDIRS) $$l.lproj; \
182             cd $$l.lproj; \
183             for f in $(COMPONENTS); do \
184               if [ -d $(WORSRCLINKUP)/../$$l.lproj/$$f ]; then \
185                 $(LN_S) -f $(WORSRCLINKUP)/../$$l.lproj/$$f .;\
186               fi;\
187             done;\
188             cd ..; \
189           fi;\
190         done)
191 endif
192
193 wobundle-resource-files:: $(WOBUNDLE_DIR_NAME)/bundle-info.plist \
194                            $(WOBUNDLE_DIR_NAME)/$(WORSRCDIRINFIX)/Info-gnustep.plist
195 ifneq ($(strip $(RESOURCE_FILES)),)
196         @(echo "Linking resources into the bundle wrapper..."; \
197         cd $(WOBUNDLE_DIR_NAME)/$(WORSRCDIRINFIX)/; \
198         for ff in $(RESOURCE_FILES); do \
199           $(LN_S) -f $(WORSRCLINKUP)/$$ff .;\
200         done)
201 endif
202
203 wobundle-localized-resource-files:: $(WOBUNDLE_DIR_NAME)/$(WORSRCDIRINFIX)/Info-gnustep.plist
204 ifneq ($(strip $(LOCALIZED_RESOURCE_FILES)),)
205         @(echo "Linking localized resources into the bundle wrapper..."; \
206         cd $(WOBUNDLE_DIR_NAME)/$(WORSRCDIRINFIX); \
207         for l in $(LANGUAGES); do \
208           if [ -d $(WORSRCLINKUP)/$$l.lproj ]; then \
209             $(MKDIRS) $$l.lproj; \
210             cd $$l.lproj; \
211             for f in $(LOCALIZED_RESOURCE_FILES); do \
212               if [ -f $(WORSRCLINKUP)/../$$l.lproj/$$f ]; then \
213                 $(LN_S) -f $(WORSRCLINKUP)/../$$l.lproj/$$f .;\
214               fi;\
215             done;\
216             cd ..;\
217           else\
218            echo "Warning - $$l.lproj not found - ignoring";\
219           fi;\
220         done)
221 endif
222
223 wobundle-webresource-dir::
224         @$(MKDIRS) $(WOBUNDLE_WEBSERVER_RESOURCE_DIRS)
225
226 wobundle-webresource-files:: $(WOBUNDLE_DIR_NAME)/Resources/WebServer \
227                               wobundle-webresource-dir
228 ifneq ($(strip $(WEBSERVER_RESOURCE_FILES)),)
229         @(echo "Linking webserver resources into the application wrapper..."; \
230         cd $(WOBUNDLE_DIR_NAME)/Resources/WebServer; \
231         for ff in $(WEBSERVER_RESOURCE_FILES); do \
232           $(LN_S) -f ../../WebServerResources/$$ff .;\
233         done)
234 endif
235
236 wobundle-localized-webresource-files:: $(WOBUNDLE_DIR_NAME)/Resources/WebServer \
237                                         wobundle-webresource-dir
238 ifneq ($(strip $(LOCALIZED_WEBSERVER_RESOURCE_FILES)),)
239         @(echo "Linking localized web resources into the application wrapper..."; \
240         cd $(WOBUNDLE_DIR_NAME)/Resources/WebServer; \
241         for l in $(LANGUAGES); do \
242           if [ -d ../../WebServerResources/$$l.lproj ]; then \
243             $(MKDIRS) $$l.lproj; \
244             cd $$l.lproj; \
245             for f in $(LOCALIZED_WEBSERVER_RESOURCE_FILES); do \
246               if [ -f ../../../WebServerResources/$$l.lproj/$$f ]; then \
247                 if [ ! -r $$f ]; then \
248                   $(LN_S) ../../../WebServerResources/$$l.lproj/$$f $$f;\
249                 fi;\
250               fi;\
251             done;\
252             cd ..; \
253           else \
254             echo "Warning - WebServerResources/$$l.lproj not found - ignoring";\
255           fi;\
256         done)
257 endif
258
259 PRINCIPAL_CLASS = $(strip $($(GNUSTEP_INSTANCE)_PRINCIPAL_CLASS))
260
261 ifeq ($(PRINCIPAL_CLASS),)
262   PRINCIPAL_CLASS = $(GNUSTEP_INSTANCE)
263 endif
264
265 $(WOBUNDLE_DIR_NAME)/bundle-info.plist: $(WOBUNDLE_DIR_NAME)
266         @(cd $(WOBUNDLE_DIR_NAME); $(LN_S) -f ../bundle-info.plist .)
267
268 HAS_WOCOMPONENTS = $($(GNUSTEP_INSTANCE)_HAS_WOCOMPONENTS)
269
270 $(WOBUNDLE_DIR_NAME)/$(WORSRCDIRINFIX)/Info-gnustep.plist: $(WOBUNDLE_DIR_NAME)/$(WORSRCDIRINFIX)
271         @(echo "{"; echo '  NOTE = "Automatically generated, do not edit!";'; \
272           echo "  NSExecutable = \"$(GNUSTEP_INSTANCE)\";"; \
273           echo "  NSPrincipalClass = \"$(PRINCIPAL_CLASS)\";"; \
274           if [ "$(HAS_WOCOMPONENTS)" != "" ]; then \
275             echo "  HasWOComponents = \"$(HAS_WOCOMPONENTS)\";"; \
276           fi; \
277           echo "}") >$@
278
279 $(WOBUNDLE_DIR_NAME)/$(WORSRCDIRINFIX):
280         @$(MKDIRS) $@
281
282 $(WOBUNDLE_DIR_NAME)/Resources/WebServer:
283         @$(MKDIRS) $@
284
285 internal-wobundle-install_:: $(WOBUNDLE_INSTALL_DIR) shared-instance-headers-install
286         rm -rf $(WOBUNDLE_INSTALL_DIR)/$(WOBUNDLE_DIR_NAME); \
287         $(TAR) chf - --exclude=CVS --exclude=.svn --to-stdout $(WOBUNDLE_DIR_NAME) | (cd $(WOBUNDLE_INSTALL_DIR); $(TAR) xf -)
288 ifneq ($(CHOWN_TO),)
289         $(CHOWN) -R $(CHOWN_TO) $(WOBUNDLE_INSTALL_DIR)/$(WOBUNDLE_DIR_NAME)
290 endif
291 ifeq ($(strip),yes)
292         $(STRIP) $(WOBUNDLE_INSTALL_DIR)/$(WOBUNDLE_FILE) 
293 endif
294
295 $(WOBUNDLE_INSTALL_DIR)::
296         @$(MKINSTALLDIRS) $@
297
298 internal-wobundle-uninstall_:: shared-instance-headers-uninstall
299         rm -rf $(WOBUNDLE_INSTALL_DIR)/$(WOBUNDLE_DIR_NAME)
300 endif
301
302 endif
303
304 ## Local variables:
305 ## mode: makefile
306 ## End: