xref: /trunk/main/solenv/inc/_tg_app.mk (revision bcc22a4c08e1268a4f06e54fb146f88ef49f2cdc)
1# *************************************************************
2#
3#  Licensed to the Apache Software Foundation (ASF) under one
4#  or more contributor license agreements.  See the NOTICE file
5#  distributed with this work for additional information
6#  regarding copyright ownership.  The ASF licenses this file
7#  to you under the Apache License, Version 2.0 (the
8#  "License"); you may not use this file except in compliance
9#  with the License.  You may obtain a copy of the License at
10#
11#    http://www.apache.org/licenses/LICENSE-2.0
12#
13#  Unless required by applicable law or agreed to in writing,
14#  software distributed under the License is distributed on an
15#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16#  KIND, either express or implied.  See the License for the
17#  specific language governing permissions and limitations
18#  under the License.
19#
20# *************************************************************
21
22CC_PATH*="$(CC_PATH)"
23
24# unroll begin
25
26.IF "$(GUI)" == "OS2" && "$(TARGETTYPE)" == "GUI"
27APP1DEF = $(MISC)/$(APP1TARGET).def
28.ENDIF
29
30.IF "$(APP1LINKTYPE)" != ""
31#must be either STATIC or SHARED
32APP1LINKTYPEFLAG=$(APPLINK$(APP1LINKTYPE))
33.ENDIF
34
35# decide how to link
36.IF "$(APP1CODETYPE)"=="C"
37APP1LINKER=$(LINKC)
38APP1STDLIB=$(subst,CPPRUNTIME, $(STDLIB))
39APP1LINKFLAGS+=$(LINKCFLAGS)
40.ELSE           # "$(APP1CODETYPE)"=="C"
41APP1LINKER=$(LINK)
42APP1STDLIB=$(subst,CPPRUNTIME,$(STDLIBCPP) $(STDLIB))
43APP1LINKFLAGS+=$(LINKFLAGS)
44.ENDIF          # "$(APP1CODETYPE)"=="C"
45
46APP1RPATH*=OOO
47LINKFLAGSRUNPATH_$(APP1RPATH)*=/ERROR:/Bad_APP1RPATH_value
48.IF "$(OS)" != "MACOSX"
49APP1LINKFLAGS+=$(LINKFLAGSRUNPATH_$(APP1RPATH))
50.ENDIF
51
52.IF "$(APP1STACK)" != ""
53.IF "$(LINKFLAGSTACK)" != ""
54APP1STACKN=$(LINKFLAGSTACK)$(APP1STACK)
55.ENDIF
56.ELSE
57APP1STACKN=
58.ENDIF
59
60.IF "$(APP1NOSAL)"==""
61.IF "$(TARGETTYPE)" == "GUI"
62APP1OBJS+= $(STDOBJVCL)
63.ENDIF
64.ENDIF
65
66.IF "$(GUI)$(COM)" == "WNTGCC"
67APP1RESO=
68.IF "$(APP1LINKRES)" != "" || "$(APP1RES)" != ""
69APP1RESO=$(MISC)/$(APP1TARGET:b)_res.o
70.ENDIF
71.ENDIF
72
73.IF "$(GUI)" == "UNX"
74APP1DEPN+:=$(APP1DEPNU)
75USE_APP1DEF=
76.ENDIF
77
78.IF "$(APP1TARGETN)"!=""
79
80.IF "$(APP1PRODUCTNAME)"!=""
81APP1PRODUCTDEF+:=-DPRODUCT_NAME=\"$(APP1PRODUCTNAME)\"
82.ENDIF          # "$(APP1PRODUCTNAME)"!=""
83
84.IF "$(linkinc)"!=""
85.IF "$(GUI)"=="WNT" || "$(GUI)"=="OS2"
86.IF "$(APP1LIBS)"!=""
87$(MISC)/$(APP1TARGET)_linkinc.ls .PHONY:
88    @@-$(RM) $@
89    sed -f $(SOLARENV)/bin/chrel.sed $(foreach,i,$(APP1LIBS) $(i:s/.lib/.lin/)) >> $@
90.ENDIF          #"$(APP1LIBS)"!=""
91.ENDIF
92
93LINKINCTARGETS+=$(MISC)/$(APP1TARGETN:b)_linkinc.ls
94$(APP1TARGETN) : $(LINKINCTARGETS)
95.ENDIF          # "$(linkinc)"!=""
96
97# Allow for target specific LIBSALCPPRT override
98APP1LIBSALCPPRT*=$(LIBSALCPPRT)
99
100$(APP1TARGETN): $(APP1OBJS) $(APP1LIBS) \
101    $(APP1RES) \
102    $(APP1ICON) $(APP1DEPN) $(USE_APP1DEF)
103    @echo "Making:   " $(@:f)
104.IF "$(GUI)"=="UNX"
105.IF "$(OS)"=="MACOSX"
106    @echo unx
107    @-$(RM) $(MISC)/$(@:b).list
108    @-$(RM) $(MISC)/$(TARGET).$(@:b)_1.cmd
109    @-$(RM) $(MISC)/$(@:b).strip
110    @echo $(STDSLO) $(APP1OBJS:s/.obj/.o/) \
111    `cat /dev/null $(APP1LIBS) | sed s\#$(ROUT)\#$(OUT)\#g` | tr -s " " "\n" > $(MISC)/$(@:b).list
112    @echo -n $(APP1LINKER) $(APP1LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) -o $@ \
113    $(APP1LINKTYPEFLAG) $(APP1STDLIBS) $(APP1STDLIB) $(STDLIB1) -filelist $(MISC)/$(@:b).list > $(MISC)/$(TARGET).$(@:b)_1.cmd
114    @$(PERL) $(SOLARENV)/bin/macosx-dylib-link-list.pl \
115        `cat $(MISC)/$(TARGET).$(@:b)_1.cmd` \
116        >> $(MISC)/$(TARGET).$(@:b)_1.cmd
117  .IF "$(VERBOSE)" == "TRUE"
118    @cat $(MISC)/$(TARGET).$(@:b)_1.cmd
119  .ENDIF
120    @+source $(MISC)/$(TARGET).$(@:b)_1.cmd
121# Need to strip __objcInit symbol to avoid duplicate symbols when loading
122# libraries at runtime
123    @-$(CC_PATH)nm $@ | grep -v ' U ' | $(AWK) '{ print $$NF }' | grep -F -x '__objcInit' > $(MISC)/$(@:b).strip
124    @$(CC_PATH)strip -i -R $(MISC)/$(@:b).strip -X $@
125    @ls -l $@
126    @$(PERL) $(SOLARENV)/bin/macosx-change-install-names.pl \
127        app $(APP1RPATH) $@
128.IF "$(TARGETTYPE)"=="GUI"
129    @echo "Making:   " $(@:f).app
130    @macosx-create-bundle $@
131.ENDIF      # "$(TARGETTYPE)"=="GUI"
132.ELSE       # "$(OS)"=="MACOSX"
133    @echo unx
134    @-$(RM) $(MISC)/$(TARGET).$(@:b)_1.cmd
135    @echo $(APP1LINKER) $(APP1LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
136    $(APP1OBJS:s/.obj/.o/) '\' >  $(MISC)/$(TARGET).$(@:b)_1.cmd
137    @cat $(mktmp /dev/null $(APP1LIBS)) | xargs -n 1 cat | sed s\#$(ROUT)\#$(OUT)\#g | sed 's#$$# \\#'  >> $(MISC)/$(TARGET).$(@:b)_1.cmd
138    @echo $(APP1LINKTYPEFLAG) $(APP1LIBSALCPPRT) $(APP1STDLIBS) $(APP1STDLIB) $(STDLIB1) -o $@ >> $(MISC)/$(TARGET).$(@:b)_1.cmd
139  .IF "$(VERBOSE)" == "TRUE"
140    @cat $(MISC)/$(TARGET).$(@:b)_1.cmd
141  .ENDIF
142    @+source $(MISC)/$(TARGET).$(@:b)_1.cmd
143  .IF "$(VERBOSE)" == "TRUE"
144    @ls -l $@
145  .ENDIF
146.ENDIF      # "$(OS)"=="MACOSX"
147.ENDIF
148.IF "$(GUI)" == "WNT"
149    @@-$(MKDIR) $(@:d:d)
150.IF "$(APP1LINKRES)" != ""
151    @@-$(RM) $(MISC)/$(APP1LINKRES:b).rc
152.IF "$(APP1ICON)" != ""
153    @-echo 1 ICON $(EMQ)"$(APP1ICON:s/\/\\/)$(EMQ)" >> $(MISC)/$(APP1LINKRES:b).rc
154.ENDIF      # "$(APP1ICON)" != ""
155.IF "$(APP1VERINFO)" != ""
156    @-echo $(EMQ)#define VERVARIANT $(BUILD) >> $(MISC)/$(APP1LINKRES:b).rc
157    @-echo $(EMQ)#include  $(EMQ)"$(APP1VERINFO)$(EMQ)" >> $(MISC)/$(APP1LINKRES:b).rc
158.ENDIF      # "$(APP1VERINFO)" != ""
159    $(COMMAND_ECHO)$(RC) -DWIN32 $(APP1PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP1LINKRES:b).rc
160.ENDIF          # "$(APP1LINKRES)" != ""
161.IF "$(COM)" == "GCC"
162    @echo mingw
163.IF "$(APP1LINKRES)" != "" || "$(APP1RES)" != ""
164    @cat $(APP1LINKRES) $(subst,/res/,/res{$(subst,$(BIN), $(@:d))} $(APP1RES)) >  $(MISC)/$(@:b)_all.res
165    windres $(MISC)/$(@:b)_all.res $(APP1RESO)
166.ENDIF
167    @echo $(LINK) $(LINKFLAGS) $(LINKFLAGSAPP) $(MINGWSSTDOBJ) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
168        $(APP1BASEX) $(APP1STACKN) -o $@ $(APP1OBJS) \
169        -Wl,-Map,$(MISC)/$(@:b).map $(STDOBJ) $(APP1RESO) \
170        `$(TYPE) /dev/null $(APP1LIBS) | sed s#$(ROUT)#$(OUT)#g` \
171        $(APP_LINKTYPE) $(APP1LIBSALCPPRT) \
172        -Wl,--start-group $(APP1STDLIBS) -Wl,--end-group $(APP1STDLIB) \
173        $(STDLIB1) $(MINGWSSTDENDOBJ) > $(MISC)/$(TARGET).$(@:b)_1.cmd
174  # need this empty line, else dmake somehow gets confused by the .IFs and .ENDIFs
175  .IF "$(VERBOSE)" == "TRUE"
176    @$(TYPE)  $(MISC)/$(TARGET).$(@:b)_1.cmd
177  .ENDIF
178    @+source $(MISC)/$(TARGET).$(@:b)_1.cmd
179    @ls -l $@
180.ELSE   # "$(COM)" == "GCC"
181.IF "$(linkinc)" == ""
182    $(COMMAND_ECHO)$(APP1LINKER) @$(mktmp \
183        $(APP1LINKFLAGS) \
184        $(LINKFLAGSAPP) $(APP1BASEX) \
185        $(APP1STACKN) \
186        -out:$@ \
187        -map:$(MISC)/{$(subst,/,_ $(APP1TARGET)).map} \
188        $(STDOBJ) \
189        $(APP1LINKRES) \
190        $(APP1RES) \
191        $(APP1OBJS) \
192        $(APP1LIBS) \
193        $(APP1STDLIBS) \
194        $(APP1STDLIB) $(STDLIB1) \
195        )
196    @-echo linking $@.manifest ...
197.IF "$(VISTA_MANIFEST)"!=""
198    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -manifest $(TRUSTED_MANIFEST_LOCATION)/trustedinfo.manifest -out:$@.tmanifest$(EMQ) $(FI)
199    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.tmanifest -outputresource:$@$(EMQ);1 $(FI)
200.ELSE
201    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -outputresource:$@$(EMQ);1 $(FI)
202.ENDIF # "$(VISTA_MANIFEST)"!=""
203    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(RM:s/+//) $@.manifest $(FI)
204    $(COMMAND_ECHO)$(IFEXIST) $@.tmanifest $(THEN) $(RM:s/+//) $@.tmanifest $(FI)
205.ELSE
206        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP1TARGET).lnk
207        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP1TARGET).lst
208        $(COMMAND_ECHO)-$(RM) $(MISC)\linkobj.lst
209        for %_i in ($(MISC)\*.obj) do type %_i >> $(MISC)\linkobj.lst
210    type $(mktmp,$(MISC)\$(APP1TARGET).lst
211        $(APP1LINKFLAGS) \
212        $(LINKFLAGSAPP) $(APP1BASEX) \
213        $(APP1STACKN) \
214        -out:$@ \
215        $(STDOBJ) \
216        $(APP1LINKRES) \
217        $(APP1RES) \
218        $(APP1OBJS) \
219        $(APP1LIBS) \
220        $(APP1STDLIBS) \
221        $(APP1STDLIB) $(STDLIB1))
222        $(COMMAND_ECHO)$(SED)$(SED) -e 's/\(\.\.\\\)\{2,4\}/..\\/g' $(MISC)\$(APP1TARGETN:b)_linkobj.lst >> $(MISC)\$(APP1TARGET).lst
223        $(COMMAND_ECHO)$(SED)$(IFEXIST) $(MISC)/$(APP1TARGET).lst $(THEN) type $(MISC)/$(APP1TARGET).lst  >> $(MISC)/$(APP1TARGET).lnk $(FI)
224        $(COMMAND_ECHO)$(SED)$(APP1LINKER) @$(MISC)\$(APP1TARGET).lnk
225.ENDIF      # "$(linkinc)" == ""
226.ENDIF      # "$(COM)" == "GCC"
227.IF "$(APP1TARGET)" == "loader"
228    $(COMMAND_ECHO)$(PERL) loader.pl $@
229    $(COMMAND_ECHO)$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
230    $(COMMAND_ECHO)$(RM) $@
231    $(COMMAND_ECHO)$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
232.ENDIF          # "$(TARGET)" == "setup"
233
234.ENDIF          # "$(GUI)" == "WNT"
235
236.IF "$(GUI)" == "OS2"
237    @+-$(MKDIR) $(@:d:d) > $(NULLDEV)
238.IF "$(APP1LINKRES)" != ""
239    @+-$(RM) $(MISC)/$(APP1LINKRES:b).rc > $(NULLDEV)
240.IF "$(APP1ICON)" != ""
241    @-+echo ICON 1 $(EMQ)"$(APP1ICON:s#/#\\\\#)$(EMQ)" >> $(MISC)$/$(APP1LINKRES:b).rc
242.ENDIF      # "$(APP1ICON)" != ""
243.IF "$(APP1VERINFO)" != ""
244    @-+echo $(EMQ)#define VERVARIANT    $(BUILD) >> $(MISC)/$(APP1LINKRES:b).rc
245    @-+echo $(EMQ)#include  $(EMQ)"$(APP1VERINFO)$(EMQ)" >> $(MISC)/$(APP1LINKRES:b).rc
246.ENDIF      # "$(APP1VERINFO)" != ""
247    $(COMMAND_ECHO)$(RC) -r -DOS2 $(APP1PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP1LINKRES:b).rc
248.ENDIF          # "$(APP1LINKRES)" != ""
249
250.IF "$(TARGETTYPE)" == "GUI"
251    @echo NAME $(APP1TARGET) WINDOWAPI > $(MISC)/$(APP1TARGET).def
252.ENDIF
253
254    $(COMMAND_ECHO)$(APP1LINKER) -v \
255        $(APP1LINKFLAGS) \
256        $(LINKFLAGSAPP) $(APP1BASEX) \
257        $(APP1STACKN) \
258        -o $@ \
259        -Zmap -L$(LB) \
260        -L$(SOLARVERSION)/$(INPATH)/lib \
261        $(STDOBJ) \
262        $(APP1LINKRES) \
263        $(APP1RES) \
264        $(APP1DEF) \
265        $(APP1OBJS) \
266        $(APP1LIBS) \
267        $(APP1STDLIBS) \
268        $(APP1STDLIB) $(STDLIB1)
269
270
271.IF "$(APP1TARGET)" == "loader"
272    $(COMMAND_ECHO)+$(PERL) loader.pl $@
273    $(COMMAND_ECHO)+$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
274    $(COMMAND_ECHO)+$(RM) $@
275    $(COMMAND_ECHO)+$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
276.ENDIF          # "$(TARGET)" == "setup"
277
278.ENDIF          # "$(GUI)" == "OS2"
279
280.ENDIF          # "$(APP1TARGETN)"!=""
281
282# New rule for automatic run targets of unit test targets
283.IF "$(APP1TEST)" == "enabled" &&  "$(APP1TARGET)" != ""
284
285$(APP1TARGET)_run: $(APP1TARGETN)
286    $(COMMAND_ECHO) $(AUGMENT_LIBRARY_PATH_LOCAL) $(APP1TARGETN) --gtest_output="xml:$(BIN)/$(APP1TARGET)_result.xml"
287
288.ENDIF
289
290
291# Instruction for linking
292# unroll begin
293
294.IF "$(GUI)" == "OS2" && "$(TARGETTYPE)" == "GUI"
295APP2DEF = $(MISC)/$(APP2TARGET).def
296.ENDIF
297
298.IF "$(APP2LINKTYPE)" != ""
299#must be either STATIC or SHARED
300APP2LINKTYPEFLAG=$(APPLINK$(APP2LINKTYPE))
301.ENDIF
302
303# decide how to link
304.IF "$(APP2CODETYPE)"=="C"
305APP2LINKER=$(LINKC)
306APP2STDLIB=$(subst,CPPRUNTIME, $(STDLIB))
307APP2LINKFLAGS+=$(LINKCFLAGS)
308.ELSE           # "$(APP2CODETYPE)"=="C"
309APP2LINKER=$(LINK)
310APP2STDLIB=$(subst,CPPRUNTIME,$(STDLIBCPP) $(STDLIB))
311APP2LINKFLAGS+=$(LINKFLAGS)
312.ENDIF          # "$(APP2CODETYPE)"=="C"
313
314APP2RPATH*=OOO
315LINKFLAGSRUNPATH_$(APP2RPATH)*=/ERROR:/Bad_APP2RPATH_value
316.IF "$(OS)" != "MACOSX"
317APP2LINKFLAGS+=$(LINKFLAGSRUNPATH_$(APP2RPATH))
318.ENDIF
319
320.IF "$(APP2STACK)" != ""
321.IF "$(LINKFLAGSTACK)" != ""
322APP2STACKN=$(LINKFLAGSTACK)$(APP2STACK)
323.ENDIF
324.ELSE
325APP2STACKN=
326.ENDIF
327
328.IF "$(APP2NOSAL)"==""
329.IF "$(TARGETTYPE)" == "GUI"
330APP2OBJS+= $(STDOBJVCL)
331.ENDIF
332.ENDIF
333
334.IF "$(GUI)$(COM)" == "WNTGCC"
335APP2RESO=
336.IF "$(APP2LINKRES)" != "" || "$(APP2RES)" != ""
337APP2RESO=$(MISC)/$(APP2TARGET:b)_res.o
338.ENDIF
339.ENDIF
340
341.IF "$(GUI)" == "UNX"
342APP2DEPN+:=$(APP2DEPNU)
343USE_APP2DEF=
344.ENDIF
345
346.IF "$(APP2TARGETN)"!=""
347
348.IF "$(APP2PRODUCTNAME)"!=""
349APP2PRODUCTDEF+:=-DPRODUCT_NAME=\"$(APP2PRODUCTNAME)\"
350.ENDIF          # "$(APP2PRODUCTNAME)"!=""
351
352.IF "$(linkinc)"!=""
353.IF "$(GUI)"=="WNT" || "$(GUI)"=="OS2"
354.IF "$(APP2LIBS)"!=""
355$(MISC)/$(APP2TARGET)_linkinc.ls .PHONY:
356    @@-$(RM) $@
357    sed -f $(SOLARENV)/bin/chrel.sed $(foreach,i,$(APP2LIBS) $(i:s/.lib/.lin/)) >> $@
358.ENDIF          #"$(APP2LIBS)"!=""
359.ENDIF
360
361LINKINCTARGETS+=$(MISC)/$(APP2TARGETN:b)_linkinc.ls
362$(APP2TARGETN) : $(LINKINCTARGETS)
363.ENDIF          # "$(linkinc)"!=""
364
365# Allow for target specific LIBSALCPPRT override
366APP2LIBSALCPPRT*=$(LIBSALCPPRT)
367
368$(APP2TARGETN): $(APP2OBJS) $(APP2LIBS) \
369    $(APP2RES) \
370    $(APP2ICON) $(APP2DEPN) $(USE_APP2DEF)
371    @echo "Making:   " $(@:f)
372.IF "$(GUI)"=="UNX"
373.IF "$(OS)"=="MACOSX"
374    @echo unx
375    @-$(RM) $(MISC)/$(@:b).list
376    @-$(RM) $(MISC)/$(TARGET).$(@:b)_2.cmd
377    @-$(RM) $(MISC)/$(@:b).strip
378    @echo $(STDSLO) $(APP2OBJS:s/.obj/.o/) \
379    `cat /dev/null $(APP2LIBS) | sed s\#$(ROUT)\#$(OUT)\#g` | tr -s " " "\n" > $(MISC)/$(@:b).list
380    @echo -n $(APP2LINKER) $(APP2LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) -o $@ \
381    $(APP2LINKTYPEFLAG) $(APP2STDLIBS) $(APP2STDLIB) $(STDLIB2) -filelist $(MISC)/$(@:b).list > $(MISC)/$(TARGET).$(@:b)_2.cmd
382    @$(PERL) $(SOLARENV)/bin/macosx-dylib-link-list.pl \
383        `cat $(MISC)/$(TARGET).$(@:b)_2.cmd` \
384        >> $(MISC)/$(TARGET).$(@:b)_2.cmd
385  .IF "$(VERBOSE)" == "TRUE"
386    @cat $(MISC)/$(TARGET).$(@:b)_2.cmd
387  .ENDIF
388    @+source $(MISC)/$(TARGET).$(@:b)_2.cmd
389# Need to strip __objcInit symbol to avoid duplicate symbols when loading
390# libraries at runtime
391    @-$(CC_PATH)nm $@ | grep -v ' U ' | $(AWK) '{ print $$NF }' | grep -F -x '__objcInit' > $(MISC)/$(@:b).strip
392    @$(CC_PATH)strip -i -R $(MISC)/$(@:b).strip -X $@
393    @ls -l $@
394    @$(PERL) $(SOLARENV)/bin/macosx-change-install-names.pl \
395        app $(APP2RPATH) $@
396.IF "$(TARGETTYPE)"=="GUI"
397    @echo "Making:   " $(@:f).app
398    @macosx-create-bundle $@
399.ENDIF      # "$(TARGETTYPE)"=="GUI"
400.ELSE       # "$(OS)"=="MACOSX"
401    @echo unx
402    @-$(RM) $(MISC)/$(TARGET).$(@:b)_2.cmd
403    @echo $(APP2LINKER) $(APP2LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
404    $(APP2OBJS:s/.obj/.o/) '\' >  $(MISC)/$(TARGET).$(@:b)_2.cmd
405    @cat $(mktmp /dev/null $(APP2LIBS)) | xargs -n 1 cat | sed s\#$(ROUT)\#$(OUT)\#g | sed 's#$$# \\#'  >> $(MISC)/$(TARGET).$(@:b)_2.cmd
406    @echo $(APP2LINKTYPEFLAG) $(APP2LIBSALCPPRT) $(APP2STDLIBS) $(APP2STDLIB) $(STDLIB2) -o $@ >> $(MISC)/$(TARGET).$(@:b)_2.cmd
407  .IF "$(VERBOSE)" == "TRUE"
408    @cat $(MISC)/$(TARGET).$(@:b)_2.cmd
409  .ENDIF
410    @+source $(MISC)/$(TARGET).$(@:b)_2.cmd
411  .IF "$(VERBOSE)" == "TRUE"
412    @ls -l $@
413  .ENDIF
414.ENDIF      # "$(OS)"=="MACOSX"
415.ENDIF
416.IF "$(GUI)" == "WNT"
417    @@-$(MKDIR) $(@:d:d)
418.IF "$(APP2LINKRES)" != ""
419    @@-$(RM) $(MISC)/$(APP2LINKRES:b).rc
420.IF "$(APP2ICON)" != ""
421    @-echo 1 ICON $(EMQ)"$(APP2ICON:s/\/\\/)$(EMQ)" >> $(MISC)/$(APP2LINKRES:b).rc
422.ENDIF      # "$(APP2ICON)" != ""
423.IF "$(APP2VERINFO)" != ""
424    @-echo $(EMQ)#define VERVARIANT $(BUILD) >> $(MISC)/$(APP2LINKRES:b).rc
425    @-echo $(EMQ)#include  $(EMQ)"$(APP2VERINFO)$(EMQ)" >> $(MISC)/$(APP2LINKRES:b).rc
426.ENDIF      # "$(APP2VERINFO)" != ""
427    $(COMMAND_ECHO)$(RC) -DWIN32 $(APP2PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP2LINKRES:b).rc
428.ENDIF          # "$(APP2LINKRES)" != ""
429.IF "$(COM)" == "GCC"
430    @echo mingw
431.IF "$(APP2LINKRES)" != "" || "$(APP2RES)" != ""
432    @cat $(APP2LINKRES) $(subst,/res/,/res{$(subst,$(BIN), $(@:d))} $(APP2RES)) >  $(MISC)/$(@:b)_all.res
433    windres $(MISC)/$(@:b)_all.res $(APP2RESO)
434.ENDIF
435    @echo $(LINK) $(LINKFLAGS) $(LINKFLAGSAPP) $(MINGWSSTDOBJ) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
436        $(APP2BASEX) $(APP2STACKN) -o $@ $(APP2OBJS) \
437        -Wl,-Map,$(MISC)/$(@:b).map $(STDOBJ) $(APP2RESO) \
438        `$(TYPE) /dev/null $(APP2LIBS) | sed s#$(ROUT)#$(OUT)#g` \
439        $(APP_LINKTYPE) $(APP2LIBSALCPPRT) \
440        -Wl,--start-group $(APP2STDLIBS) -Wl,--end-group $(APP2STDLIB) \
441        $(STDLIB2) $(MINGWSSTDENDOBJ) > $(MISC)/$(TARGET).$(@:b)_2.cmd
442  # need this empty line, else dmake somehow gets confused by the .IFs and .ENDIFs
443  .IF "$(VERBOSE)" == "TRUE"
444    @$(TYPE)  $(MISC)/$(TARGET).$(@:b)_2.cmd
445  .ENDIF
446    @+source $(MISC)/$(TARGET).$(@:b)_2.cmd
447    @ls -l $@
448.ELSE   # "$(COM)" == "GCC"
449.IF "$(linkinc)" == ""
450    $(COMMAND_ECHO)$(APP2LINKER) @$(mktmp \
451        $(APP2LINKFLAGS) \
452        $(LINKFLAGSAPP) $(APP2BASEX) \
453        $(APP2STACKN) \
454        -out:$@ \
455        -map:$(MISC)/{$(subst,/,_ $(APP2TARGET)).map} \
456        $(STDOBJ) \
457        $(APP2LINKRES) \
458        $(APP2RES) \
459        $(APP2OBJS) \
460        $(APP2LIBS) \
461        $(APP2STDLIBS) \
462        $(APP2STDLIB) $(STDLIB2) \
463        )
464    @-echo linking $@.manifest ...
465.IF "$(VISTA_MANIFEST)"!=""
466    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -manifest $(TRUSTED_MANIFEST_LOCATION)/trustedinfo.manifest -out:$@.tmanifest$(EMQ) $(FI)
467    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.tmanifest -outputresource:$@$(EMQ);1 $(FI)
468.ELSE
469    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -outputresource:$@$(EMQ);1 $(FI)
470.ENDIF # "$(VISTA_MANIFEST)"!=""
471    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(RM:s/+//) $@.manifest $(FI)
472    $(COMMAND_ECHO)$(IFEXIST) $@.tmanifest $(THEN) $(RM:s/+//) $@.tmanifest $(FI)
473.ELSE
474        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP2TARGET).lnk
475        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP2TARGET).lst
476        $(COMMAND_ECHO)-$(RM) $(MISC)\linkobj.lst
477        for %_i in ($(MISC)\*.obj) do type %_i >> $(MISC)\linkobj.lst
478    type $(mktmp,$(MISC)\$(APP2TARGET).lst
479        $(APP2LINKFLAGS) \
480        $(LINKFLAGSAPP) $(APP2BASEX) \
481        $(APP2STACKN) \
482        -out:$@ \
483        $(STDOBJ) \
484        $(APP2LINKRES) \
485        $(APP2RES) \
486        $(APP2OBJS) \
487        $(APP2LIBS) \
488        $(APP2STDLIBS) \
489        $(APP2STDLIB) $(STDLIB2))
490        $(COMMAND_ECHO)$(SED)$(SED) -e 's/\(\.\.\\\)\{2,4\}/..\\/g' $(MISC)\$(APP2TARGETN:b)_linkobj.lst >> $(MISC)\$(APP2TARGET).lst
491        $(COMMAND_ECHO)$(SED)$(IFEXIST) $(MISC)/$(APP2TARGET).lst $(THEN) type $(MISC)/$(APP2TARGET).lst  >> $(MISC)/$(APP2TARGET).lnk $(FI)
492        $(COMMAND_ECHO)$(SED)$(APP2LINKER) @$(MISC)\$(APP2TARGET).lnk
493.ENDIF      # "$(linkinc)" == ""
494.ENDIF      # "$(COM)" == "GCC"
495.IF "$(APP2TARGET)" == "loader"
496    $(COMMAND_ECHO)$(PERL) loader.pl $@
497    $(COMMAND_ECHO)$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
498    $(COMMAND_ECHO)$(RM) $@
499    $(COMMAND_ECHO)$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
500.ENDIF          # "$(TARGET)" == "setup"
501
502.ENDIF          # "$(GUI)" == "WNT"
503
504.IF "$(GUI)" == "OS2"
505    @+-$(MKDIR) $(@:d:d) > $(NULLDEV)
506.IF "$(APP2LINKRES)" != ""
507    @+-$(RM) $(MISC)/$(APP2LINKRES:b).rc > $(NULLDEV)
508.IF "$(APP2ICON)" != ""
509    @-+echo ICON 1 $(EMQ)"$(APP2ICON:s#/#\\\\#)$(EMQ)" >> $(MISC)$/$(APP2LINKRES:b).rc
510.ENDIF      # "$(APP2ICON)" != ""
511.IF "$(APP2VERINFO)" != ""
512    @-+echo $(EMQ)#define VERVARIANT    $(BUILD) >> $(MISC)/$(APP2LINKRES:b).rc
513    @-+echo $(EMQ)#include  $(EMQ)"$(APP2VERINFO)$(EMQ)" >> $(MISC)/$(APP2LINKRES:b).rc
514.ENDIF      # "$(APP2VERINFO)" != ""
515    $(COMMAND_ECHO)$(RC) -r -DOS2 $(APP2PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP2LINKRES:b).rc
516.ENDIF          # "$(APP2LINKRES)" != ""
517
518.IF "$(TARGETTYPE)" == "GUI"
519    @echo NAME $(APP2TARGET) WINDOWAPI > $(MISC)/$(APP2TARGET).def
520.ENDIF
521
522    $(COMMAND_ECHO)$(APP2LINKER) -v \
523        $(APP2LINKFLAGS) \
524        $(LINKFLAGSAPP) $(APP2BASEX) \
525        $(APP2STACKN) \
526        -o $@ \
527        -Zmap -L$(LB) \
528        -L$(SOLARVERSION)/$(INPATH)/lib \
529        $(STDOBJ) \
530        $(APP2LINKRES) \
531        $(APP2RES) \
532        $(APP2DEF) \
533        $(APP2OBJS) \
534        $(APP2LIBS) \
535        $(APP2STDLIBS) \
536        $(APP2STDLIB) $(STDLIB2)
537
538
539.IF "$(APP2TARGET)" == "loader"
540    $(COMMAND_ECHO)+$(PERL) loader.pl $@
541    $(COMMAND_ECHO)+$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
542    $(COMMAND_ECHO)+$(RM) $@
543    $(COMMAND_ECHO)+$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
544.ENDIF          # "$(TARGET)" == "setup"
545
546.ENDIF          # "$(GUI)" == "OS2"
547
548.ENDIF          # "$(APP2TARGETN)"!=""
549
550# New rule for automatic run targets of unit test targets
551.IF "$(APP2TEST)" == "enabled" &&  "$(APP2TARGET)" != ""
552
553$(APP2TARGET)_run: $(APP2TARGETN)
554    $(COMMAND_ECHO) $(AUGMENT_LIBRARY_PATH_LOCAL) $(APP2TARGETN) --gtest_output="xml:$(BIN)/$(APP2TARGET)_result.xml"
555
556.ENDIF
557
558
559# Instruction for linking
560# unroll begin
561
562.IF "$(GUI)" == "OS2" && "$(TARGETTYPE)" == "GUI"
563APP3DEF = $(MISC)/$(APP3TARGET).def
564.ENDIF
565
566.IF "$(APP3LINKTYPE)" != ""
567#must be either STATIC or SHARED
568APP3LINKTYPEFLAG=$(APPLINK$(APP3LINKTYPE))
569.ENDIF
570
571# decide how to link
572.IF "$(APP3CODETYPE)"=="C"
573APP3LINKER=$(LINKC)
574APP3STDLIB=$(subst,CPPRUNTIME, $(STDLIB))
575APP3LINKFLAGS+=$(LINKCFLAGS)
576.ELSE           # "$(APP3CODETYPE)"=="C"
577APP3LINKER=$(LINK)
578APP3STDLIB=$(subst,CPPRUNTIME,$(STDLIBCPP) $(STDLIB))
579APP3LINKFLAGS+=$(LINKFLAGS)
580.ENDIF          # "$(APP3CODETYPE)"=="C"
581
582APP3RPATH*=OOO
583LINKFLAGSRUNPATH_$(APP3RPATH)*=/ERROR:/Bad_APP3RPATH_value
584.IF "$(OS)" != "MACOSX"
585APP3LINKFLAGS+=$(LINKFLAGSRUNPATH_$(APP3RPATH))
586.ENDIF
587
588.IF "$(APP3STACK)" != ""
589.IF "$(LINKFLAGSTACK)" != ""
590APP3STACKN=$(LINKFLAGSTACK)$(APP3STACK)
591.ENDIF
592.ELSE
593APP3STACKN=
594.ENDIF
595
596.IF "$(APP3NOSAL)"==""
597.IF "$(TARGETTYPE)" == "GUI"
598APP3OBJS+= $(STDOBJVCL)
599.ENDIF
600.ENDIF
601
602.IF "$(GUI)$(COM)" == "WNTGCC"
603APP3RESO=
604.IF "$(APP3LINKRES)" != "" || "$(APP3RES)" != ""
605APP3RESO=$(MISC)/$(APP3TARGET:b)_res.o
606.ENDIF
607.ENDIF
608
609.IF "$(GUI)" == "UNX"
610APP3DEPN+:=$(APP3DEPNU)
611USE_APP3DEF=
612.ENDIF
613
614.IF "$(APP3TARGETN)"!=""
615
616.IF "$(APP3PRODUCTNAME)"!=""
617APP3PRODUCTDEF+:=-DPRODUCT_NAME=\"$(APP3PRODUCTNAME)\"
618.ENDIF          # "$(APP3PRODUCTNAME)"!=""
619
620.IF "$(linkinc)"!=""
621.IF "$(GUI)"=="WNT" || "$(GUI)"=="OS2"
622.IF "$(APP3LIBS)"!=""
623$(MISC)/$(APP3TARGET)_linkinc.ls .PHONY:
624    @@-$(RM) $@
625    sed -f $(SOLARENV)/bin/chrel.sed $(foreach,i,$(APP3LIBS) $(i:s/.lib/.lin/)) >> $@
626.ENDIF          #"$(APP3LIBS)"!=""
627.ENDIF
628
629LINKINCTARGETS+=$(MISC)/$(APP3TARGETN:b)_linkinc.ls
630$(APP3TARGETN) : $(LINKINCTARGETS)
631.ENDIF          # "$(linkinc)"!=""
632
633# Allow for target specific LIBSALCPPRT override
634APP3LIBSALCPPRT*=$(LIBSALCPPRT)
635
636$(APP3TARGETN): $(APP3OBJS) $(APP3LIBS) \
637    $(APP3RES) \
638    $(APP3ICON) $(APP3DEPN) $(USE_APP3DEF)
639    @echo "Making:   " $(@:f)
640.IF "$(GUI)"=="UNX"
641.IF "$(OS)"=="MACOSX"
642    @echo unx
643    @-$(RM) $(MISC)/$(@:b).list
644    @-$(RM) $(MISC)/$(TARGET).$(@:b)_3.cmd
645    @-$(RM) $(MISC)/$(@:b).strip
646    @echo $(STDSLO) $(APP3OBJS:s/.obj/.o/) \
647    `cat /dev/null $(APP3LIBS) | sed s\#$(ROUT)\#$(OUT)\#g` | tr -s " " "\n" > $(MISC)/$(@:b).list
648    @echo -n $(APP3LINKER) $(APP3LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) -o $@ \
649    $(APP3LINKTYPEFLAG) $(APP3STDLIBS) $(APP3STDLIB) $(STDLIB3) -filelist $(MISC)/$(@:b).list > $(MISC)/$(TARGET).$(@:b)_3.cmd
650    @$(PERL) $(SOLARENV)/bin/macosx-dylib-link-list.pl \
651        `cat $(MISC)/$(TARGET).$(@:b)_3.cmd` \
652        >> $(MISC)/$(TARGET).$(@:b)_3.cmd
653  .IF "$(VERBOSE)" == "TRUE"
654    @cat $(MISC)/$(TARGET).$(@:b)_3.cmd
655  .ENDIF
656    @+source $(MISC)/$(TARGET).$(@:b)_3.cmd
657# Need to strip __objcInit symbol to avoid duplicate symbols when loading
658# libraries at runtime
659    @-$(CC_PATH)nm $@ | grep -v ' U ' | $(AWK) '{ print $$NF }' | grep -F -x '__objcInit' > $(MISC)/$(@:b).strip
660    @$(CC_PATH)strip -i -R $(MISC)/$(@:b).strip -X $@
661    @ls -l $@
662    @$(PERL) $(SOLARENV)/bin/macosx-change-install-names.pl \
663        app $(APP3RPATH) $@
664.IF "$(TARGETTYPE)"=="GUI"
665    @echo "Making:   " $(@:f).app
666    @macosx-create-bundle $@
667.ENDIF      # "$(TARGETTYPE)"=="GUI"
668.ELSE       # "$(OS)"=="MACOSX"
669    @echo unx
670    @-$(RM) $(MISC)/$(TARGET).$(@:b)_3.cmd
671    @echo $(APP3LINKER) $(APP3LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
672    $(APP3OBJS:s/.obj/.o/) '\' >  $(MISC)/$(TARGET).$(@:b)_3.cmd
673    @cat $(mktmp /dev/null $(APP3LIBS)) | xargs -n 1 cat | sed s\#$(ROUT)\#$(OUT)\#g | sed 's#$$# \\#'  >> $(MISC)/$(TARGET).$(@:b)_3.cmd
674    @echo $(APP3LINKTYPEFLAG) $(APP3LIBSALCPPRT) $(APP3STDLIBS) $(APP3STDLIB) $(STDLIB3) -o $@ >> $(MISC)/$(TARGET).$(@:b)_3.cmd
675  .IF "$(VERBOSE)" == "TRUE"
676    @cat $(MISC)/$(TARGET).$(@:b)_3.cmd
677  .ENDIF
678    @+source $(MISC)/$(TARGET).$(@:b)_3.cmd
679  .IF "$(VERBOSE)" == "TRUE"
680    @ls -l $@
681  .ENDIF
682.ENDIF      # "$(OS)"=="MACOSX"
683.ENDIF
684.IF "$(GUI)" == "WNT"
685    @@-$(MKDIR) $(@:d:d)
686.IF "$(APP3LINKRES)" != ""
687    @@-$(RM) $(MISC)/$(APP3LINKRES:b).rc
688.IF "$(APP3ICON)" != ""
689    @-echo 1 ICON $(EMQ)"$(APP3ICON:s/\/\\/)$(EMQ)" >> $(MISC)/$(APP3LINKRES:b).rc
690.ENDIF      # "$(APP3ICON)" != ""
691.IF "$(APP3VERINFO)" != ""
692    @-echo $(EMQ)#define VERVARIANT $(BUILD) >> $(MISC)/$(APP3LINKRES:b).rc
693    @-echo $(EMQ)#include  $(EMQ)"$(APP3VERINFO)$(EMQ)" >> $(MISC)/$(APP3LINKRES:b).rc
694.ENDIF      # "$(APP3VERINFO)" != ""
695    $(COMMAND_ECHO)$(RC) -DWIN32 $(APP3PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP3LINKRES:b).rc
696.ENDIF          # "$(APP3LINKRES)" != ""
697.IF "$(COM)" == "GCC"
698    @echo mingw
699.IF "$(APP3LINKRES)" != "" || "$(APP3RES)" != ""
700    @cat $(APP3LINKRES) $(subst,/res/,/res{$(subst,$(BIN), $(@:d))} $(APP3RES)) >  $(MISC)/$(@:b)_all.res
701    windres $(MISC)/$(@:b)_all.res $(APP3RESO)
702.ENDIF
703    @echo $(LINK) $(LINKFLAGS) $(LINKFLAGSAPP) $(MINGWSSTDOBJ) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
704        $(APP3BASEX) $(APP3STACKN) -o $@ $(APP3OBJS) \
705        -Wl,-Map,$(MISC)/$(@:b).map $(STDOBJ) $(APP3RESO) \
706        `$(TYPE) /dev/null $(APP3LIBS) | sed s#$(ROUT)#$(OUT)#g` \
707        $(APP_LINKTYPE) $(APP3LIBSALCPPRT) \
708        -Wl,--start-group $(APP3STDLIBS) -Wl,--end-group $(APP3STDLIB) \
709        $(STDLIB3) $(MINGWSSTDENDOBJ) > $(MISC)/$(TARGET).$(@:b)_3.cmd
710  # need this empty line, else dmake somehow gets confused by the .IFs and .ENDIFs
711  .IF "$(VERBOSE)" == "TRUE"
712    @$(TYPE)  $(MISC)/$(TARGET).$(@:b)_3.cmd
713  .ENDIF
714    @+source $(MISC)/$(TARGET).$(@:b)_3.cmd
715    @ls -l $@
716.ELSE   # "$(COM)" == "GCC"
717.IF "$(linkinc)" == ""
718    $(COMMAND_ECHO)$(APP3LINKER) @$(mktmp \
719        $(APP3LINKFLAGS) \
720        $(LINKFLAGSAPP) $(APP3BASEX) \
721        $(APP3STACKN) \
722        -out:$@ \
723        -map:$(MISC)/{$(subst,/,_ $(APP3TARGET)).map} \
724        $(STDOBJ) \
725        $(APP3LINKRES) \
726        $(APP3RES) \
727        $(APP3OBJS) \
728        $(APP3LIBS) \
729        $(APP3STDLIBS) \
730        $(APP3STDLIB) $(STDLIB3) \
731        )
732    @-echo linking $@.manifest ...
733.IF "$(VISTA_MANIFEST)"!=""
734    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -manifest $(TRUSTED_MANIFEST_LOCATION)/trustedinfo.manifest -out:$@.tmanifest$(EMQ) $(FI)
735    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.tmanifest -outputresource:$@$(EMQ);1 $(FI)
736.ELSE
737    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -outputresource:$@$(EMQ);1 $(FI)
738.ENDIF # "$(VISTA_MANIFEST)"!=""
739    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(RM:s/+//) $@.manifest $(FI)
740    $(COMMAND_ECHO)$(IFEXIST) $@.tmanifest $(THEN) $(RM:s/+//) $@.tmanifest $(FI)
741.ELSE
742        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP3TARGET).lnk
743        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP3TARGET).lst
744        $(COMMAND_ECHO)-$(RM) $(MISC)\linkobj.lst
745        for %_i in ($(MISC)\*.obj) do type %_i >> $(MISC)\linkobj.lst
746    type $(mktmp,$(MISC)\$(APP3TARGET).lst
747        $(APP3LINKFLAGS) \
748        $(LINKFLAGSAPP) $(APP3BASEX) \
749        $(APP3STACKN) \
750        -out:$@ \
751        $(STDOBJ) \
752        $(APP3LINKRES) \
753        $(APP3RES) \
754        $(APP3OBJS) \
755        $(APP3LIBS) \
756        $(APP3STDLIBS) \
757        $(APP3STDLIB) $(STDLIB3))
758        $(COMMAND_ECHO)$(SED)$(SED) -e 's/\(\.\.\\\)\{2,4\}/..\\/g' $(MISC)\$(APP3TARGETN:b)_linkobj.lst >> $(MISC)\$(APP3TARGET).lst
759        $(COMMAND_ECHO)$(SED)$(IFEXIST) $(MISC)/$(APP3TARGET).lst $(THEN) type $(MISC)/$(APP3TARGET).lst  >> $(MISC)/$(APP3TARGET).lnk $(FI)
760        $(COMMAND_ECHO)$(SED)$(APP3LINKER) @$(MISC)\$(APP3TARGET).lnk
761.ENDIF      # "$(linkinc)" == ""
762.ENDIF      # "$(COM)" == "GCC"
763.IF "$(APP3TARGET)" == "loader"
764    $(COMMAND_ECHO)$(PERL) loader.pl $@
765    $(COMMAND_ECHO)$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
766    $(COMMAND_ECHO)$(RM) $@
767    $(COMMAND_ECHO)$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
768.ENDIF          # "$(TARGET)" == "setup"
769
770.ENDIF          # "$(GUI)" == "WNT"
771
772.IF "$(GUI)" == "OS2"
773    @+-$(MKDIR) $(@:d:d) > $(NULLDEV)
774.IF "$(APP3LINKRES)" != ""
775    @+-$(RM) $(MISC)/$(APP3LINKRES:b).rc > $(NULLDEV)
776.IF "$(APP3ICON)" != ""
777    @-+echo ICON 1 $(EMQ)"$(APP3ICON:s#/#\\\\#)$(EMQ)" >> $(MISC)$/$(APP3LINKRES:b).rc
778.ENDIF      # "$(APP3ICON)" != ""
779.IF "$(APP3VERINFO)" != ""
780    @-+echo $(EMQ)#define VERVARIANT    $(BUILD) >> $(MISC)/$(APP3LINKRES:b).rc
781    @-+echo $(EMQ)#include  $(EMQ)"$(APP3VERINFO)$(EMQ)" >> $(MISC)/$(APP3LINKRES:b).rc
782.ENDIF      # "$(APP3VERINFO)" != ""
783    $(COMMAND_ECHO)$(RC) -r -DOS2 $(APP3PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP3LINKRES:b).rc
784.ENDIF          # "$(APP3LINKRES)" != ""
785
786.IF "$(TARGETTYPE)" == "GUI"
787    @echo NAME $(APP3TARGET) WINDOWAPI > $(MISC)/$(APP3TARGET).def
788.ENDIF
789
790    $(COMMAND_ECHO)$(APP3LINKER) -v \
791        $(APP3LINKFLAGS) \
792        $(LINKFLAGSAPP) $(APP3BASEX) \
793        $(APP3STACKN) \
794        -o $@ \
795        -Zmap -L$(LB) \
796        -L$(SOLARVERSION)/$(INPATH)/lib \
797        $(STDOBJ) \
798        $(APP3LINKRES) \
799        $(APP3RES) \
800        $(APP3DEF) \
801        $(APP3OBJS) \
802        $(APP3LIBS) \
803        $(APP3STDLIBS) \
804        $(APP3STDLIB) $(STDLIB3)
805
806
807.IF "$(APP3TARGET)" == "loader"
808    $(COMMAND_ECHO)+$(PERL) loader.pl $@
809    $(COMMAND_ECHO)+$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
810    $(COMMAND_ECHO)+$(RM) $@
811    $(COMMAND_ECHO)+$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
812.ENDIF          # "$(TARGET)" == "setup"
813
814.ENDIF          # "$(GUI)" == "OS2"
815
816.ENDIF          # "$(APP3TARGETN)"!=""
817
818# New rule for automatic run targets of unit test targets
819.IF "$(APP3TEST)" == "enabled" &&  "$(APP3TARGET)" != ""
820
821$(APP3TARGET)_run: $(APP3TARGETN)
822    $(COMMAND_ECHO) $(AUGMENT_LIBRARY_PATH_LOCAL) $(APP3TARGETN) --gtest_output="xml:$(BIN)/$(APP3TARGET)_result.xml"
823
824.ENDIF
825
826
827# Instruction for linking
828# unroll begin
829
830.IF "$(GUI)" == "OS2" && "$(TARGETTYPE)" == "GUI"
831APP4DEF = $(MISC)/$(APP4TARGET).def
832.ENDIF
833
834.IF "$(APP4LINKTYPE)" != ""
835#must be either STATIC or SHARED
836APP4LINKTYPEFLAG=$(APPLINK$(APP4LINKTYPE))
837.ENDIF
838
839# decide how to link
840.IF "$(APP4CODETYPE)"=="C"
841APP4LINKER=$(LINKC)
842APP4STDLIB=$(subst,CPPRUNTIME, $(STDLIB))
843APP4LINKFLAGS+=$(LINKCFLAGS)
844.ELSE           # "$(APP4CODETYPE)"=="C"
845APP4LINKER=$(LINK)
846APP4STDLIB=$(subst,CPPRUNTIME,$(STDLIBCPP) $(STDLIB))
847APP4LINKFLAGS+=$(LINKFLAGS)
848.ENDIF          # "$(APP4CODETYPE)"=="C"
849
850APP4RPATH*=OOO
851LINKFLAGSRUNPATH_$(APP4RPATH)*=/ERROR:/Bad_APP4RPATH_value
852.IF "$(OS)" != "MACOSX"
853APP4LINKFLAGS+=$(LINKFLAGSRUNPATH_$(APP4RPATH))
854.ENDIF
855
856.IF "$(APP4STACK)" != ""
857.IF "$(LINKFLAGSTACK)" != ""
858APP4STACKN=$(LINKFLAGSTACK)$(APP4STACK)
859.ENDIF
860.ELSE
861APP4STACKN=
862.ENDIF
863
864.IF "$(APP4NOSAL)"==""
865.IF "$(TARGETTYPE)" == "GUI"
866APP4OBJS+= $(STDOBJVCL)
867.ENDIF
868.ENDIF
869
870.IF "$(GUI)$(COM)" == "WNTGCC"
871APP4RESO=
872.IF "$(APP4LINKRES)" != "" || "$(APP4RES)" != ""
873APP4RESO=$(MISC)/$(APP4TARGET:b)_res.o
874.ENDIF
875.ENDIF
876
877.IF "$(GUI)" == "UNX"
878APP4DEPN+:=$(APP4DEPNU)
879USE_APP4DEF=
880.ENDIF
881
882.IF "$(APP4TARGETN)"!=""
883
884.IF "$(APP4PRODUCTNAME)"!=""
885APP4PRODUCTDEF+:=-DPRODUCT_NAME=\"$(APP4PRODUCTNAME)\"
886.ENDIF          # "$(APP4PRODUCTNAME)"!=""
887
888.IF "$(linkinc)"!=""
889.IF "$(GUI)"=="WNT" || "$(GUI)"=="OS2"
890.IF "$(APP4LIBS)"!=""
891$(MISC)/$(APP4TARGET)_linkinc.ls .PHONY:
892    @@-$(RM) $@
893    sed -f $(SOLARENV)/bin/chrel.sed $(foreach,i,$(APP4LIBS) $(i:s/.lib/.lin/)) >> $@
894.ENDIF          #"$(APP4LIBS)"!=""
895.ENDIF
896
897LINKINCTARGETS+=$(MISC)/$(APP4TARGETN:b)_linkinc.ls
898$(APP4TARGETN) : $(LINKINCTARGETS)
899.ENDIF          # "$(linkinc)"!=""
900
901# Allow for target specific LIBSALCPPRT override
902APP4LIBSALCPPRT*=$(LIBSALCPPRT)
903
904$(APP4TARGETN): $(APP4OBJS) $(APP4LIBS) \
905    $(APP4RES) \
906    $(APP4ICON) $(APP4DEPN) $(USE_APP4DEF)
907    @echo "Making:   " $(@:f)
908.IF "$(GUI)"=="UNX"
909.IF "$(OS)"=="MACOSX"
910    @echo unx
911    @-$(RM) $(MISC)/$(@:b).list
912    @-$(RM) $(MISC)/$(TARGET).$(@:b)_4.cmd
913    @-$(RM) $(MISC)/$(@:b).strip
914    @echo $(STDSLO) $(APP4OBJS:s/.obj/.o/) \
915    `cat /dev/null $(APP4LIBS) | sed s\#$(ROUT)\#$(OUT)\#g` | tr -s " " "\n" > $(MISC)/$(@:b).list
916    @echo -n $(APP4LINKER) $(APP4LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) -o $@ \
917    $(APP4LINKTYPEFLAG) $(APP4STDLIBS) $(APP4STDLIB) $(STDLIB4) -filelist $(MISC)/$(@:b).list > $(MISC)/$(TARGET).$(@:b)_4.cmd
918    @$(PERL) $(SOLARENV)/bin/macosx-dylib-link-list.pl \
919        `cat $(MISC)/$(TARGET).$(@:b)_4.cmd` \
920        >> $(MISC)/$(TARGET).$(@:b)_4.cmd
921  .IF "$(VERBOSE)" == "TRUE"
922    @cat $(MISC)/$(TARGET).$(@:b)_4.cmd
923  .ENDIF
924    @+source $(MISC)/$(TARGET).$(@:b)_4.cmd
925# Need to strip __objcInit symbol to avoid duplicate symbols when loading
926# libraries at runtime
927    @-$(CC_PATH)nm $@ | grep -v ' U ' | $(AWK) '{ print $$NF }' | grep -F -x '__objcInit' > $(MISC)/$(@:b).strip
928    @$(CC_PATH)strip -i -R $(MISC)/$(@:b).strip -X $@
929    @ls -l $@
930    @$(PERL) $(SOLARENV)/bin/macosx-change-install-names.pl \
931        app $(APP4RPATH) $@
932.IF "$(TARGETTYPE)"=="GUI"
933    @echo "Making:   " $(@:f).app
934    @macosx-create-bundle $@
935.ENDIF      # "$(TARGETTYPE)"=="GUI"
936.ELSE       # "$(OS)"=="MACOSX"
937    @echo unx
938    @-$(RM) $(MISC)/$(TARGET).$(@:b)_4.cmd
939    @echo $(APP4LINKER) $(APP4LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
940    $(APP4OBJS:s/.obj/.o/) '\' >  $(MISC)/$(TARGET).$(@:b)_4.cmd
941    @cat $(mktmp /dev/null $(APP4LIBS)) | xargs -n 1 cat | sed s\#$(ROUT)\#$(OUT)\#g | sed 's#$$# \\#'  >> $(MISC)/$(TARGET).$(@:b)_4.cmd
942    @echo $(APP4LINKTYPEFLAG) $(APP4LIBSALCPPRT) $(APP4STDLIBS) $(APP4STDLIB) $(STDLIB4) -o $@ >> $(MISC)/$(TARGET).$(@:b)_4.cmd
943  .IF "$(VERBOSE)" == "TRUE"
944    @cat $(MISC)/$(TARGET).$(@:b)_4.cmd
945  .ENDIF
946    @+source $(MISC)/$(TARGET).$(@:b)_4.cmd
947  .IF "$(VERBOSE)" == "TRUE"
948    @ls -l $@
949  .ENDIF
950.ENDIF      # "$(OS)"=="MACOSX"
951.ENDIF
952.IF "$(GUI)" == "WNT"
953    @@-$(MKDIR) $(@:d:d)
954.IF "$(APP4LINKRES)" != ""
955    @@-$(RM) $(MISC)/$(APP4LINKRES:b).rc
956.IF "$(APP4ICON)" != ""
957    @-echo 1 ICON $(EMQ)"$(APP4ICON:s/\/\\/)$(EMQ)" >> $(MISC)/$(APP4LINKRES:b).rc
958.ENDIF      # "$(APP4ICON)" != ""
959.IF "$(APP4VERINFO)" != ""
960    @-echo $(EMQ)#define VERVARIANT $(BUILD) >> $(MISC)/$(APP4LINKRES:b).rc
961    @-echo $(EMQ)#include  $(EMQ)"$(APP4VERINFO)$(EMQ)" >> $(MISC)/$(APP4LINKRES:b).rc
962.ENDIF      # "$(APP4VERINFO)" != ""
963    $(COMMAND_ECHO)$(RC) -DWIN32 $(APP4PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP4LINKRES:b).rc
964.ENDIF          # "$(APP4LINKRES)" != ""
965.IF "$(COM)" == "GCC"
966    @echo mingw
967.IF "$(APP4LINKRES)" != "" || "$(APP4RES)" != ""
968    @cat $(APP4LINKRES) $(subst,/res/,/res{$(subst,$(BIN), $(@:d))} $(APP4RES)) >  $(MISC)/$(@:b)_all.res
969    windres $(MISC)/$(@:b)_all.res $(APP4RESO)
970.ENDIF
971    @echo $(LINK) $(LINKFLAGS) $(LINKFLAGSAPP) $(MINGWSSTDOBJ) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
972        $(APP4BASEX) $(APP4STACKN) -o $@ $(APP4OBJS) \
973        -Wl,-Map,$(MISC)/$(@:b).map $(STDOBJ) $(APP4RESO) \
974        `$(TYPE) /dev/null $(APP4LIBS) | sed s#$(ROUT)#$(OUT)#g` \
975        $(APP_LINKTYPE) $(APP4LIBSALCPPRT) \
976        -Wl,--start-group $(APP4STDLIBS) -Wl,--end-group $(APP4STDLIB) \
977        $(STDLIB4) $(MINGWSSTDENDOBJ) > $(MISC)/$(TARGET).$(@:b)_4.cmd
978  # need this empty line, else dmake somehow gets confused by the .IFs and .ENDIFs
979  .IF "$(VERBOSE)" == "TRUE"
980    @$(TYPE)  $(MISC)/$(TARGET).$(@:b)_4.cmd
981  .ENDIF
982    @+source $(MISC)/$(TARGET).$(@:b)_4.cmd
983    @ls -l $@
984.ELSE   # "$(COM)" == "GCC"
985.IF "$(linkinc)" == ""
986    $(COMMAND_ECHO)$(APP4LINKER) @$(mktmp \
987        $(APP4LINKFLAGS) \
988        $(LINKFLAGSAPP) $(APP4BASEX) \
989        $(APP4STACKN) \
990        -out:$@ \
991        -map:$(MISC)/{$(subst,/,_ $(APP4TARGET)).map} \
992        $(STDOBJ) \
993        $(APP4LINKRES) \
994        $(APP4RES) \
995        $(APP4OBJS) \
996        $(APP4LIBS) \
997        $(APP4STDLIBS) \
998        $(APP4STDLIB) $(STDLIB4) \
999        )
1000    @-echo linking $@.manifest ...
1001.IF "$(VISTA_MANIFEST)"!=""
1002    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -manifest $(TRUSTED_MANIFEST_LOCATION)/trustedinfo.manifest -out:$@.tmanifest$(EMQ) $(FI)
1003    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.tmanifest -outputresource:$@$(EMQ);1 $(FI)
1004.ELSE
1005    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -outputresource:$@$(EMQ);1 $(FI)
1006.ENDIF # "$(VISTA_MANIFEST)"!=""
1007    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(RM:s/+//) $@.manifest $(FI)
1008    $(COMMAND_ECHO)$(IFEXIST) $@.tmanifest $(THEN) $(RM:s/+//) $@.tmanifest $(FI)
1009.ELSE
1010        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP4TARGET).lnk
1011        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP4TARGET).lst
1012        $(COMMAND_ECHO)-$(RM) $(MISC)\linkobj.lst
1013        for %_i in ($(MISC)\*.obj) do type %_i >> $(MISC)\linkobj.lst
1014    type $(mktmp,$(MISC)\$(APP4TARGET).lst
1015        $(APP4LINKFLAGS) \
1016        $(LINKFLAGSAPP) $(APP4BASEX) \
1017        $(APP4STACKN) \
1018        -out:$@ \
1019        $(STDOBJ) \
1020        $(APP4LINKRES) \
1021        $(APP4RES) \
1022        $(APP4OBJS) \
1023        $(APP4LIBS) \
1024        $(APP4STDLIBS) \
1025        $(APP4STDLIB) $(STDLIB4))
1026        $(COMMAND_ECHO)$(SED)$(SED) -e 's/\(\.\.\\\)\{2,4\}/..\\/g' $(MISC)\$(APP4TARGETN:b)_linkobj.lst >> $(MISC)\$(APP4TARGET).lst
1027        $(COMMAND_ECHO)$(SED)$(IFEXIST) $(MISC)/$(APP4TARGET).lst $(THEN) type $(MISC)/$(APP4TARGET).lst  >> $(MISC)/$(APP4TARGET).lnk $(FI)
1028        $(COMMAND_ECHO)$(SED)$(APP4LINKER) @$(MISC)\$(APP4TARGET).lnk
1029.ENDIF      # "$(linkinc)" == ""
1030.ENDIF      # "$(COM)" == "GCC"
1031.IF "$(APP4TARGET)" == "loader"
1032    $(COMMAND_ECHO)$(PERL) loader.pl $@
1033    $(COMMAND_ECHO)$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
1034    $(COMMAND_ECHO)$(RM) $@
1035    $(COMMAND_ECHO)$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
1036.ENDIF          # "$(TARGET)" == "setup"
1037
1038.ENDIF          # "$(GUI)" == "WNT"
1039
1040.IF "$(GUI)" == "OS2"
1041    @+-$(MKDIR) $(@:d:d) > $(NULLDEV)
1042.IF "$(APP4LINKRES)" != ""
1043    @+-$(RM) $(MISC)/$(APP4LINKRES:b).rc > $(NULLDEV)
1044.IF "$(APP4ICON)" != ""
1045    @-+echo ICON 1 $(EMQ)"$(APP4ICON:s#/#\\\\#)$(EMQ)" >> $(MISC)$/$(APP4LINKRES:b).rc
1046.ENDIF      # "$(APP4ICON)" != ""
1047.IF "$(APP4VERINFO)" != ""
1048    @-+echo $(EMQ)#define VERVARIANT    $(BUILD) >> $(MISC)/$(APP4LINKRES:b).rc
1049    @-+echo $(EMQ)#include  $(EMQ)"$(APP4VERINFO)$(EMQ)" >> $(MISC)/$(APP4LINKRES:b).rc
1050.ENDIF      # "$(APP4VERINFO)" != ""
1051    $(COMMAND_ECHO)$(RC) -r -DOS2 $(APP4PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP4LINKRES:b).rc
1052.ENDIF          # "$(APP4LINKRES)" != ""
1053
1054.IF "$(TARGETTYPE)" == "GUI"
1055    @echo NAME $(APP4TARGET) WINDOWAPI > $(MISC)/$(APP4TARGET).def
1056.ENDIF
1057
1058    $(COMMAND_ECHO)$(APP4LINKER) -v \
1059        $(APP4LINKFLAGS) \
1060        $(LINKFLAGSAPP) $(APP4BASEX) \
1061        $(APP4STACKN) \
1062        -o $@ \
1063        -Zmap -L$(LB) \
1064        -L$(SOLARVERSION)/$(INPATH)/lib \
1065        $(STDOBJ) \
1066        $(APP4LINKRES) \
1067        $(APP4RES) \
1068        $(APP4DEF) \
1069        $(APP4OBJS) \
1070        $(APP4LIBS) \
1071        $(APP4STDLIBS) \
1072        $(APP4STDLIB) $(STDLIB4)
1073
1074
1075.IF "$(APP4TARGET)" == "loader"
1076    $(COMMAND_ECHO)+$(PERL) loader.pl $@
1077    $(COMMAND_ECHO)+$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
1078    $(COMMAND_ECHO)+$(RM) $@
1079    $(COMMAND_ECHO)+$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
1080.ENDIF          # "$(TARGET)" == "setup"
1081
1082.ENDIF          # "$(GUI)" == "OS2"
1083
1084.ENDIF          # "$(APP4TARGETN)"!=""
1085
1086# New rule for automatic run targets of unit test targets
1087.IF "$(APP4TEST)" == "enabled" &&  "$(APP4TARGET)" != ""
1088
1089$(APP4TARGET)_run: $(APP4TARGETN)
1090    $(COMMAND_ECHO) $(AUGMENT_LIBRARY_PATH_LOCAL) $(APP4TARGETN) --gtest_output="xml:$(BIN)/$(APP4TARGET)_result.xml"
1091
1092.ENDIF
1093
1094
1095# Instruction for linking
1096# unroll begin
1097
1098.IF "$(GUI)" == "OS2" && "$(TARGETTYPE)" == "GUI"
1099APP5DEF = $(MISC)/$(APP5TARGET).def
1100.ENDIF
1101
1102.IF "$(APP5LINKTYPE)" != ""
1103#must be either STATIC or SHARED
1104APP5LINKTYPEFLAG=$(APPLINK$(APP5LINKTYPE))
1105.ENDIF
1106
1107# decide how to link
1108.IF "$(APP5CODETYPE)"=="C"
1109APP5LINKER=$(LINKC)
1110APP5STDLIB=$(subst,CPPRUNTIME, $(STDLIB))
1111APP5LINKFLAGS+=$(LINKCFLAGS)
1112.ELSE           # "$(APP5CODETYPE)"=="C"
1113APP5LINKER=$(LINK)
1114APP5STDLIB=$(subst,CPPRUNTIME,$(STDLIBCPP) $(STDLIB))
1115APP5LINKFLAGS+=$(LINKFLAGS)
1116.ENDIF          # "$(APP5CODETYPE)"=="C"
1117
1118APP5RPATH*=OOO
1119LINKFLAGSRUNPATH_$(APP5RPATH)*=/ERROR:/Bad_APP5RPATH_value
1120.IF "$(OS)" != "MACOSX"
1121APP5LINKFLAGS+=$(LINKFLAGSRUNPATH_$(APP5RPATH))
1122.ENDIF
1123
1124.IF "$(APP5STACK)" != ""
1125.IF "$(LINKFLAGSTACK)" != ""
1126APP5STACKN=$(LINKFLAGSTACK)$(APP5STACK)
1127.ENDIF
1128.ELSE
1129APP5STACKN=
1130.ENDIF
1131
1132.IF "$(APP5NOSAL)"==""
1133.IF "$(TARGETTYPE)" == "GUI"
1134APP5OBJS+= $(STDOBJVCL)
1135.ENDIF
1136.ENDIF
1137
1138.IF "$(GUI)$(COM)" == "WNTGCC"
1139APP5RESO=
1140.IF "$(APP5LINKRES)" != "" || "$(APP5RES)" != ""
1141APP5RESO=$(MISC)/$(APP5TARGET:b)_res.o
1142.ENDIF
1143.ENDIF
1144
1145.IF "$(GUI)" == "UNX"
1146APP5DEPN+:=$(APP5DEPNU)
1147USE_APP5DEF=
1148.ENDIF
1149
1150.IF "$(APP5TARGETN)"!=""
1151
1152.IF "$(APP5PRODUCTNAME)"!=""
1153APP5PRODUCTDEF+:=-DPRODUCT_NAME=\"$(APP5PRODUCTNAME)\"
1154.ENDIF          # "$(APP5PRODUCTNAME)"!=""
1155
1156.IF "$(linkinc)"!=""
1157.IF "$(GUI)"=="WNT" || "$(GUI)"=="OS2"
1158.IF "$(APP5LIBS)"!=""
1159$(MISC)/$(APP5TARGET)_linkinc.ls .PHONY:
1160    @@-$(RM) $@
1161    sed -f $(SOLARENV)/bin/chrel.sed $(foreach,i,$(APP5LIBS) $(i:s/.lib/.lin/)) >> $@
1162.ENDIF          #"$(APP5LIBS)"!=""
1163.ENDIF
1164
1165LINKINCTARGETS+=$(MISC)/$(APP5TARGETN:b)_linkinc.ls
1166$(APP5TARGETN) : $(LINKINCTARGETS)
1167.ENDIF          # "$(linkinc)"!=""
1168
1169# Allow for target specific LIBSALCPPRT override
1170APP5LIBSALCPPRT*=$(LIBSALCPPRT)
1171
1172$(APP5TARGETN): $(APP5OBJS) $(APP5LIBS) \
1173    $(APP5RES) \
1174    $(APP5ICON) $(APP5DEPN) $(USE_APP5DEF)
1175    @echo "Making:   " $(@:f)
1176.IF "$(GUI)"=="UNX"
1177.IF "$(OS)"=="MACOSX"
1178    @echo unx
1179    @-$(RM) $(MISC)/$(@:b).list
1180    @-$(RM) $(MISC)/$(TARGET).$(@:b)_5.cmd
1181    @-$(RM) $(MISC)/$(@:b).strip
1182    @echo $(STDSLO) $(APP5OBJS:s/.obj/.o/) \
1183    `cat /dev/null $(APP5LIBS) | sed s\#$(ROUT)\#$(OUT)\#g` | tr -s " " "\n" > $(MISC)/$(@:b).list
1184    @echo -n $(APP5LINKER) $(APP5LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) -o $@ \
1185    $(APP5LINKTYPEFLAG) $(APP5STDLIBS) $(APP5STDLIB) $(STDLIB5) -filelist $(MISC)/$(@:b).list > $(MISC)/$(TARGET).$(@:b)_5.cmd
1186    @$(PERL) $(SOLARENV)/bin/macosx-dylib-link-list.pl \
1187        `cat $(MISC)/$(TARGET).$(@:b)_5.cmd` \
1188        >> $(MISC)/$(TARGET).$(@:b)_5.cmd
1189  .IF "$(VERBOSE)" == "TRUE"
1190    @cat $(MISC)/$(TARGET).$(@:b)_5.cmd
1191  .ENDIF
1192    @+source $(MISC)/$(TARGET).$(@:b)_5.cmd
1193# Need to strip __objcInit symbol to avoid duplicate symbols when loading
1194# libraries at runtime
1195    @-$(CC_PATH)nm $@ | grep -v ' U ' | $(AWK) '{ print $$NF }' | grep -F -x '__objcInit' > $(MISC)/$(@:b).strip
1196    @$(CC_PATH)strip -i -R $(MISC)/$(@:b).strip -X $@
1197    @ls -l $@
1198    @$(PERL) $(SOLARENV)/bin/macosx-change-install-names.pl \
1199        app $(APP5RPATH) $@
1200.IF "$(TARGETTYPE)"=="GUI"
1201    @echo "Making:   " $(@:f).app
1202    @macosx-create-bundle $@
1203.ENDIF      # "$(TARGETTYPE)"=="GUI"
1204.ELSE       # "$(OS)"=="MACOSX"
1205    @echo unx
1206    @-$(RM) $(MISC)/$(TARGET).$(@:b)_5.cmd
1207    @echo $(APP5LINKER) $(APP5LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
1208    $(APP5OBJS:s/.obj/.o/) '\' >  $(MISC)/$(TARGET).$(@:b)_5.cmd
1209    @cat $(mktmp /dev/null $(APP5LIBS)) | xargs -n 1 cat | sed s\#$(ROUT)\#$(OUT)\#g | sed 's#$$# \\#'  >> $(MISC)/$(TARGET).$(@:b)_5.cmd
1210    @echo $(APP5LINKTYPEFLAG) $(APP5LIBSALCPPRT) $(APP5STDLIBS) $(APP5STDLIB) $(STDLIB5) -o $@ >> $(MISC)/$(TARGET).$(@:b)_5.cmd
1211  .IF "$(VERBOSE)" == "TRUE"
1212    @cat $(MISC)/$(TARGET).$(@:b)_5.cmd
1213  .ENDIF
1214    @+source $(MISC)/$(TARGET).$(@:b)_5.cmd
1215  .IF "$(VERBOSE)" == "TRUE"
1216    @ls -l $@
1217  .ENDIF
1218.ENDIF      # "$(OS)"=="MACOSX"
1219.ENDIF
1220.IF "$(GUI)" == "WNT"
1221    @@-$(MKDIR) $(@:d:d)
1222.IF "$(APP5LINKRES)" != ""
1223    @@-$(RM) $(MISC)/$(APP5LINKRES:b).rc
1224.IF "$(APP5ICON)" != ""
1225    @-echo 1 ICON $(EMQ)"$(APP5ICON:s/\/\\/)$(EMQ)" >> $(MISC)/$(APP5LINKRES:b).rc
1226.ENDIF      # "$(APP5ICON)" != ""
1227.IF "$(APP5VERINFO)" != ""
1228    @-echo $(EMQ)#define VERVARIANT $(BUILD) >> $(MISC)/$(APP5LINKRES:b).rc
1229    @-echo $(EMQ)#include  $(EMQ)"$(APP5VERINFO)$(EMQ)" >> $(MISC)/$(APP5LINKRES:b).rc
1230.ENDIF      # "$(APP5VERINFO)" != ""
1231    $(COMMAND_ECHO)$(RC) -DWIN32 $(APP5PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP5LINKRES:b).rc
1232.ENDIF          # "$(APP5LINKRES)" != ""
1233.IF "$(COM)" == "GCC"
1234    @echo mingw
1235.IF "$(APP5LINKRES)" != "" || "$(APP5RES)" != ""
1236    @cat $(APP5LINKRES) $(subst,/res/,/res{$(subst,$(BIN), $(@:d))} $(APP5RES)) >  $(MISC)/$(@:b)_all.res
1237    windres $(MISC)/$(@:b)_all.res $(APP5RESO)
1238.ENDIF
1239    @echo $(LINK) $(LINKFLAGS) $(LINKFLAGSAPP) $(MINGWSSTDOBJ) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
1240        $(APP5BASEX) $(APP5STACKN) -o $@ $(APP5OBJS) \
1241        -Wl,-Map,$(MISC)/$(@:b).map $(STDOBJ) $(APP5RESO) \
1242        `$(TYPE) /dev/null $(APP5LIBS) | sed s#$(ROUT)#$(OUT)#g` \
1243        $(APP_LINKTYPE) $(APP5LIBSALCPPRT) \
1244        -Wl,--start-group $(APP5STDLIBS) -Wl,--end-group $(APP5STDLIB) \
1245        $(STDLIB5) $(MINGWSSTDENDOBJ) > $(MISC)/$(TARGET).$(@:b)_5.cmd
1246  # need this empty line, else dmake somehow gets confused by the .IFs and .ENDIFs
1247  .IF "$(VERBOSE)" == "TRUE"
1248    @$(TYPE)  $(MISC)/$(TARGET).$(@:b)_5.cmd
1249  .ENDIF
1250    @+source $(MISC)/$(TARGET).$(@:b)_5.cmd
1251    @ls -l $@
1252.ELSE   # "$(COM)" == "GCC"
1253.IF "$(linkinc)" == ""
1254    $(COMMAND_ECHO)$(APP5LINKER) @$(mktmp \
1255        $(APP5LINKFLAGS) \
1256        $(LINKFLAGSAPP) $(APP5BASEX) \
1257        $(APP5STACKN) \
1258        -out:$@ \
1259        -map:$(MISC)/{$(subst,/,_ $(APP5TARGET)).map} \
1260        $(STDOBJ) \
1261        $(APP5LINKRES) \
1262        $(APP5RES) \
1263        $(APP5OBJS) \
1264        $(APP5LIBS) \
1265        $(APP5STDLIBS) \
1266        $(APP5STDLIB) $(STDLIB5) \
1267        )
1268    @-echo linking $@.manifest ...
1269.IF "$(VISTA_MANIFEST)"!=""
1270    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -manifest $(TRUSTED_MANIFEST_LOCATION)/trustedinfo.manifest -out:$@.tmanifest$(EMQ) $(FI)
1271    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.tmanifest -outputresource:$@$(EMQ);1 $(FI)
1272.ELSE
1273    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -outputresource:$@$(EMQ);1 $(FI)
1274.ENDIF # "$(VISTA_MANIFEST)"!=""
1275    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(RM:s/+//) $@.manifest $(FI)
1276    $(COMMAND_ECHO)$(IFEXIST) $@.tmanifest $(THEN) $(RM:s/+//) $@.tmanifest $(FI)
1277.ELSE
1278        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP5TARGET).lnk
1279        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP5TARGET).lst
1280        $(COMMAND_ECHO)-$(RM) $(MISC)\linkobj.lst
1281        for %_i in ($(MISC)\*.obj) do type %_i >> $(MISC)\linkobj.lst
1282    type $(mktmp,$(MISC)\$(APP5TARGET).lst
1283        $(APP5LINKFLAGS) \
1284        $(LINKFLAGSAPP) $(APP5BASEX) \
1285        $(APP5STACKN) \
1286        -out:$@ \
1287        $(STDOBJ) \
1288        $(APP5LINKRES) \
1289        $(APP5RES) \
1290        $(APP5OBJS) \
1291        $(APP5LIBS) \
1292        $(APP5STDLIBS) \
1293        $(APP5STDLIB) $(STDLIB5))
1294        $(COMMAND_ECHO)$(SED)$(SED) -e 's/\(\.\.\\\)\{2,4\}/..\\/g' $(MISC)\$(APP5TARGETN:b)_linkobj.lst >> $(MISC)\$(APP5TARGET).lst
1295        $(COMMAND_ECHO)$(SED)$(IFEXIST) $(MISC)/$(APP5TARGET).lst $(THEN) type $(MISC)/$(APP5TARGET).lst  >> $(MISC)/$(APP5TARGET).lnk $(FI)
1296        $(COMMAND_ECHO)$(SED)$(APP5LINKER) @$(MISC)\$(APP5TARGET).lnk
1297.ENDIF      # "$(linkinc)" == ""
1298.ENDIF      # "$(COM)" == "GCC"
1299.IF "$(APP5TARGET)" == "loader"
1300    $(COMMAND_ECHO)$(PERL) loader.pl $@
1301    $(COMMAND_ECHO)$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
1302    $(COMMAND_ECHO)$(RM) $@
1303    $(COMMAND_ECHO)$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
1304.ENDIF          # "$(TARGET)" == "setup"
1305
1306.ENDIF          # "$(GUI)" == "WNT"
1307
1308.IF "$(GUI)" == "OS2"
1309    @+-$(MKDIR) $(@:d:d) > $(NULLDEV)
1310.IF "$(APP5LINKRES)" != ""
1311    @+-$(RM) $(MISC)/$(APP5LINKRES:b).rc > $(NULLDEV)
1312.IF "$(APP5ICON)" != ""
1313    @-+echo ICON 1 $(EMQ)"$(APP5ICON:s#/#\\\\#)$(EMQ)" >> $(MISC)$/$(APP5LINKRES:b).rc
1314.ENDIF      # "$(APP5ICON)" != ""
1315.IF "$(APP5VERINFO)" != ""
1316    @-+echo $(EMQ)#define VERVARIANT    $(BUILD) >> $(MISC)/$(APP5LINKRES:b).rc
1317    @-+echo $(EMQ)#include  $(EMQ)"$(APP5VERINFO)$(EMQ)" >> $(MISC)/$(APP5LINKRES:b).rc
1318.ENDIF      # "$(APP5VERINFO)" != ""
1319    $(COMMAND_ECHO)$(RC) -r -DOS2 $(APP5PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP5LINKRES:b).rc
1320.ENDIF          # "$(APP5LINKRES)" != ""
1321
1322.IF "$(TARGETTYPE)" == "GUI"
1323    @echo NAME $(APP5TARGET) WINDOWAPI > $(MISC)/$(APP5TARGET).def
1324.ENDIF
1325
1326    $(COMMAND_ECHO)$(APP5LINKER) -v \
1327        $(APP5LINKFLAGS) \
1328        $(LINKFLAGSAPP) $(APP5BASEX) \
1329        $(APP5STACKN) \
1330        -o $@ \
1331        -Zmap -L$(LB) \
1332        -L$(SOLARVERSION)/$(INPATH)/lib \
1333        $(STDOBJ) \
1334        $(APP5LINKRES) \
1335        $(APP5RES) \
1336        $(APP5DEF) \
1337        $(APP5OBJS) \
1338        $(APP5LIBS) \
1339        $(APP5STDLIBS) \
1340        $(APP5STDLIB) $(STDLIB5)
1341
1342
1343.IF "$(APP5TARGET)" == "loader"
1344    $(COMMAND_ECHO)+$(PERL) loader.pl $@
1345    $(COMMAND_ECHO)+$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
1346    $(COMMAND_ECHO)+$(RM) $@
1347    $(COMMAND_ECHO)+$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
1348.ENDIF          # "$(TARGET)" == "setup"
1349
1350.ENDIF          # "$(GUI)" == "OS2"
1351
1352.ENDIF          # "$(APP5TARGETN)"!=""
1353
1354# New rule for automatic run targets of unit test targets
1355.IF "$(APP5TEST)" == "enabled" &&  "$(APP5TARGET)" != ""
1356
1357$(APP5TARGET)_run: $(APP5TARGETN)
1358    $(COMMAND_ECHO) $(AUGMENT_LIBRARY_PATH_LOCAL) $(APP5TARGETN) --gtest_output="xml:$(BIN)/$(APP5TARGET)_result.xml"
1359
1360.ENDIF
1361
1362
1363# Instruction for linking
1364# unroll begin
1365
1366.IF "$(GUI)" == "OS2" && "$(TARGETTYPE)" == "GUI"
1367APP6DEF = $(MISC)/$(APP6TARGET).def
1368.ENDIF
1369
1370.IF "$(APP6LINKTYPE)" != ""
1371#must be either STATIC or SHARED
1372APP6LINKTYPEFLAG=$(APPLINK$(APP6LINKTYPE))
1373.ENDIF
1374
1375# decide how to link
1376.IF "$(APP6CODETYPE)"=="C"
1377APP6LINKER=$(LINKC)
1378APP6STDLIB=$(subst,CPPRUNTIME, $(STDLIB))
1379APP6LINKFLAGS+=$(LINKCFLAGS)
1380.ELSE           # "$(APP6CODETYPE)"=="C"
1381APP6LINKER=$(LINK)
1382APP6STDLIB=$(subst,CPPRUNTIME,$(STDLIBCPP) $(STDLIB))
1383APP6LINKFLAGS+=$(LINKFLAGS)
1384.ENDIF          # "$(APP6CODETYPE)"=="C"
1385
1386APP6RPATH*=OOO
1387LINKFLAGSRUNPATH_$(APP6RPATH)*=/ERROR:/Bad_APP6RPATH_value
1388.IF "$(OS)" != "MACOSX"
1389APP6LINKFLAGS+=$(LINKFLAGSRUNPATH_$(APP6RPATH))
1390.ENDIF
1391
1392.IF "$(APP6STACK)" != ""
1393.IF "$(LINKFLAGSTACK)" != ""
1394APP6STACKN=$(LINKFLAGSTACK)$(APP6STACK)
1395.ENDIF
1396.ELSE
1397APP6STACKN=
1398.ENDIF
1399
1400.IF "$(APP6NOSAL)"==""
1401.IF "$(TARGETTYPE)" == "GUI"
1402APP6OBJS+= $(STDOBJVCL)
1403.ENDIF
1404.ENDIF
1405
1406.IF "$(GUI)$(COM)" == "WNTGCC"
1407APP6RESO=
1408.IF "$(APP6LINKRES)" != "" || "$(APP6RES)" != ""
1409APP6RESO=$(MISC)/$(APP6TARGET:b)_res.o
1410.ENDIF
1411.ENDIF
1412
1413.IF "$(GUI)" == "UNX"
1414APP6DEPN+:=$(APP6DEPNU)
1415USE_APP6DEF=
1416.ENDIF
1417
1418.IF "$(APP6TARGETN)"!=""
1419
1420.IF "$(APP6PRODUCTNAME)"!=""
1421APP6PRODUCTDEF+:=-DPRODUCT_NAME=\"$(APP6PRODUCTNAME)\"
1422.ENDIF          # "$(APP6PRODUCTNAME)"!=""
1423
1424.IF "$(linkinc)"!=""
1425.IF "$(GUI)"=="WNT" || "$(GUI)"=="OS2"
1426.IF "$(APP6LIBS)"!=""
1427$(MISC)/$(APP6TARGET)_linkinc.ls .PHONY:
1428    @@-$(RM) $@
1429    sed -f $(SOLARENV)/bin/chrel.sed $(foreach,i,$(APP6LIBS) $(i:s/.lib/.lin/)) >> $@
1430.ENDIF          #"$(APP6LIBS)"!=""
1431.ENDIF
1432
1433LINKINCTARGETS+=$(MISC)/$(APP6TARGETN:b)_linkinc.ls
1434$(APP6TARGETN) : $(LINKINCTARGETS)
1435.ENDIF          # "$(linkinc)"!=""
1436
1437# Allow for target specific LIBSALCPPRT override
1438APP6LIBSALCPPRT*=$(LIBSALCPPRT)
1439
1440$(APP6TARGETN): $(APP6OBJS) $(APP6LIBS) \
1441    $(APP6RES) \
1442    $(APP6ICON) $(APP6DEPN) $(USE_APP6DEF)
1443    @echo "Making:   " $(@:f)
1444.IF "$(GUI)"=="UNX"
1445.IF "$(OS)"=="MACOSX"
1446    @echo unx
1447    @-$(RM) $(MISC)/$(@:b).list
1448    @-$(RM) $(MISC)/$(TARGET).$(@:b)_6.cmd
1449    @-$(RM) $(MISC)/$(@:b).strip
1450    @echo $(STDSLO) $(APP6OBJS:s/.obj/.o/) \
1451    `cat /dev/null $(APP6LIBS) | sed s\#$(ROUT)\#$(OUT)\#g` | tr -s " " "\n" > $(MISC)/$(@:b).list
1452    @echo -n $(APP6LINKER) $(APP6LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) -o $@ \
1453    $(APP6LINKTYPEFLAG) $(APP6STDLIBS) $(APP6STDLIB) $(STDLIB6) -filelist $(MISC)/$(@:b).list > $(MISC)/$(TARGET).$(@:b)_6.cmd
1454    @$(PERL) $(SOLARENV)/bin/macosx-dylib-link-list.pl \
1455        `cat $(MISC)/$(TARGET).$(@:b)_6.cmd` \
1456        >> $(MISC)/$(TARGET).$(@:b)_6.cmd
1457  .IF "$(VERBOSE)" == "TRUE"
1458    @cat $(MISC)/$(TARGET).$(@:b)_6.cmd
1459  .ENDIF
1460    @+source $(MISC)/$(TARGET).$(@:b)_6.cmd
1461# Need to strip __objcInit symbol to avoid duplicate symbols when loading
1462# libraries at runtime
1463    @-$(CC_PATH)nm $@ | grep -v ' U ' | $(AWK) '{ print $$NF }' | grep -F -x '__objcInit' > $(MISC)/$(@:b).strip
1464    @$(CC_PATH)strip -i -R $(MISC)/$(@:b).strip -X $@
1465    @ls -l $@
1466    @$(PERL) $(SOLARENV)/bin/macosx-change-install-names.pl \
1467        app $(APP6RPATH) $@
1468.IF "$(TARGETTYPE)"=="GUI"
1469    @echo "Making:   " $(@:f).app
1470    @macosx-create-bundle $@
1471.ENDIF      # "$(TARGETTYPE)"=="GUI"
1472.ELSE       # "$(OS)"=="MACOSX"
1473    @echo unx
1474    @-$(RM) $(MISC)/$(TARGET).$(@:b)_6.cmd
1475    @echo $(APP6LINKER) $(APP6LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
1476    $(APP6OBJS:s/.obj/.o/) '\' >  $(MISC)/$(TARGET).$(@:b)_6.cmd
1477    @cat $(mktmp /dev/null $(APP6LIBS)) | xargs -n 1 cat | sed s\#$(ROUT)\#$(OUT)\#g | sed 's#$$# \\#'  >> $(MISC)/$(TARGET).$(@:b)_6.cmd
1478    @echo $(APP6LINKTYPEFLAG) $(APP6LIBSALCPPRT) $(APP6STDLIBS) $(APP6STDLIB) $(STDLIB6) -o $@ >> $(MISC)/$(TARGET).$(@:b)_6.cmd
1479  .IF "$(VERBOSE)" == "TRUE"
1480    @cat $(MISC)/$(TARGET).$(@:b)_6.cmd
1481  .ENDIF
1482    @+source $(MISC)/$(TARGET).$(@:b)_6.cmd
1483  .IF "$(VERBOSE)" == "TRUE"
1484    @ls -l $@
1485  .ENDIF
1486.ENDIF      # "$(OS)"=="MACOSX"
1487.ENDIF
1488.IF "$(GUI)" == "WNT"
1489    @@-$(MKDIR) $(@:d:d)
1490.IF "$(APP6LINKRES)" != ""
1491    @@-$(RM) $(MISC)/$(APP6LINKRES:b).rc
1492.IF "$(APP6ICON)" != ""
1493    @-echo 1 ICON $(EMQ)"$(APP6ICON:s/\/\\/)$(EMQ)" >> $(MISC)/$(APP6LINKRES:b).rc
1494.ENDIF      # "$(APP6ICON)" != ""
1495.IF "$(APP6VERINFO)" != ""
1496    @-echo $(EMQ)#define VERVARIANT $(BUILD) >> $(MISC)/$(APP6LINKRES:b).rc
1497    @-echo $(EMQ)#include  $(EMQ)"$(APP6VERINFO)$(EMQ)" >> $(MISC)/$(APP6LINKRES:b).rc
1498.ENDIF      # "$(APP6VERINFO)" != ""
1499    $(COMMAND_ECHO)$(RC) -DWIN32 $(APP6PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP6LINKRES:b).rc
1500.ENDIF          # "$(APP6LINKRES)" != ""
1501.IF "$(COM)" == "GCC"
1502    @echo mingw
1503.IF "$(APP6LINKRES)" != "" || "$(APP6RES)" != ""
1504    @cat $(APP6LINKRES) $(subst,/res/,/res{$(subst,$(BIN), $(@:d))} $(APP6RES)) >  $(MISC)/$(@:b)_all.res
1505    windres $(MISC)/$(@:b)_all.res $(APP6RESO)
1506.ENDIF
1507    @echo $(LINK) $(LINKFLAGS) $(LINKFLAGSAPP) $(MINGWSSTDOBJ) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
1508        $(APP6BASEX) $(APP6STACKN) -o $@ $(APP6OBJS) \
1509        -Wl,-Map,$(MISC)/$(@:b).map $(STDOBJ) $(APP6RESO) \
1510        `$(TYPE) /dev/null $(APP6LIBS) | sed s#$(ROUT)#$(OUT)#g` \
1511        $(APP_LINKTYPE) $(APP6LIBSALCPPRT) \
1512        -Wl,--start-group $(APP6STDLIBS) -Wl,--end-group $(APP6STDLIB) \
1513        $(STDLIB6) $(MINGWSSTDENDOBJ) > $(MISC)/$(TARGET).$(@:b)_6.cmd
1514  # need this empty line, else dmake somehow gets confused by the .IFs and .ENDIFs
1515  .IF "$(VERBOSE)" == "TRUE"
1516    @$(TYPE)  $(MISC)/$(TARGET).$(@:b)_6.cmd
1517  .ENDIF
1518    @+source $(MISC)/$(TARGET).$(@:b)_6.cmd
1519    @ls -l $@
1520.ELSE   # "$(COM)" == "GCC"
1521.IF "$(linkinc)" == ""
1522    $(COMMAND_ECHO)$(APP6LINKER) @$(mktmp \
1523        $(APP6LINKFLAGS) \
1524        $(LINKFLAGSAPP) $(APP6BASEX) \
1525        $(APP6STACKN) \
1526        -out:$@ \
1527        -map:$(MISC)/{$(subst,/,_ $(APP6TARGET)).map} \
1528        $(STDOBJ) \
1529        $(APP6LINKRES) \
1530        $(APP6RES) \
1531        $(APP6OBJS) \
1532        $(APP6LIBS) \
1533        $(APP6STDLIBS) \
1534        $(APP6STDLIB) $(STDLIB6) \
1535        )
1536    @-echo linking $@.manifest ...
1537.IF "$(VISTA_MANIFEST)"!=""
1538    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -manifest $(TRUSTED_MANIFEST_LOCATION)/trustedinfo.manifest -out:$@.tmanifest$(EMQ) $(FI)
1539    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.tmanifest -outputresource:$@$(EMQ);1 $(FI)
1540.ELSE
1541    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -outputresource:$@$(EMQ);1 $(FI)
1542.ENDIF # "$(VISTA_MANIFEST)"!=""
1543    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(RM:s/+//) $@.manifest $(FI)
1544    $(COMMAND_ECHO)$(IFEXIST) $@.tmanifest $(THEN) $(RM:s/+//) $@.tmanifest $(FI)
1545.ELSE
1546        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP6TARGET).lnk
1547        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP6TARGET).lst
1548        $(COMMAND_ECHO)-$(RM) $(MISC)\linkobj.lst
1549        for %_i in ($(MISC)\*.obj) do type %_i >> $(MISC)\linkobj.lst
1550    type $(mktmp,$(MISC)\$(APP6TARGET).lst
1551        $(APP6LINKFLAGS) \
1552        $(LINKFLAGSAPP) $(APP6BASEX) \
1553        $(APP6STACKN) \
1554        -out:$@ \
1555        $(STDOBJ) \
1556        $(APP6LINKRES) \
1557        $(APP6RES) \
1558        $(APP6OBJS) \
1559        $(APP6LIBS) \
1560        $(APP6STDLIBS) \
1561        $(APP6STDLIB) $(STDLIB6))
1562        $(COMMAND_ECHO)$(SED)$(SED) -e 's/\(\.\.\\\)\{2,4\}/..\\/g' $(MISC)\$(APP6TARGETN:b)_linkobj.lst >> $(MISC)\$(APP6TARGET).lst
1563        $(COMMAND_ECHO)$(SED)$(IFEXIST) $(MISC)/$(APP6TARGET).lst $(THEN) type $(MISC)/$(APP6TARGET).lst  >> $(MISC)/$(APP6TARGET).lnk $(FI)
1564        $(COMMAND_ECHO)$(SED)$(APP6LINKER) @$(MISC)\$(APP6TARGET).lnk
1565.ENDIF      # "$(linkinc)" == ""
1566.ENDIF      # "$(COM)" == "GCC"
1567.IF "$(APP6TARGET)" == "loader"
1568    $(COMMAND_ECHO)$(PERL) loader.pl $@
1569    $(COMMAND_ECHO)$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
1570    $(COMMAND_ECHO)$(RM) $@
1571    $(COMMAND_ECHO)$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
1572.ENDIF          # "$(TARGET)" == "setup"
1573
1574.ENDIF          # "$(GUI)" == "WNT"
1575
1576.IF "$(GUI)" == "OS2"
1577    @+-$(MKDIR) $(@:d:d) > $(NULLDEV)
1578.IF "$(APP6LINKRES)" != ""
1579    @+-$(RM) $(MISC)/$(APP6LINKRES:b).rc > $(NULLDEV)
1580.IF "$(APP6ICON)" != ""
1581    @-+echo ICON 1 $(EMQ)"$(APP6ICON:s#/#\\\\#)$(EMQ)" >> $(MISC)$/$(APP6LINKRES:b).rc
1582.ENDIF      # "$(APP6ICON)" != ""
1583.IF "$(APP6VERINFO)" != ""
1584    @-+echo $(EMQ)#define VERVARIANT    $(BUILD) >> $(MISC)/$(APP6LINKRES:b).rc
1585    @-+echo $(EMQ)#include  $(EMQ)"$(APP6VERINFO)$(EMQ)" >> $(MISC)/$(APP6LINKRES:b).rc
1586.ENDIF      # "$(APP6VERINFO)" != ""
1587    $(COMMAND_ECHO)$(RC) -r -DOS2 $(APP6PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP6LINKRES:b).rc
1588.ENDIF          # "$(APP6LINKRES)" != ""
1589
1590.IF "$(TARGETTYPE)" == "GUI"
1591    @echo NAME $(APP6TARGET) WINDOWAPI > $(MISC)/$(APP6TARGET).def
1592.ENDIF
1593
1594    $(COMMAND_ECHO)$(APP6LINKER) -v \
1595        $(APP6LINKFLAGS) \
1596        $(LINKFLAGSAPP) $(APP6BASEX) \
1597        $(APP6STACKN) \
1598        -o $@ \
1599        -Zmap -L$(LB) \
1600        -L$(SOLARVERSION)/$(INPATH)/lib \
1601        $(STDOBJ) \
1602        $(APP6LINKRES) \
1603        $(APP6RES) \
1604        $(APP6DEF) \
1605        $(APP6OBJS) \
1606        $(APP6LIBS) \
1607        $(APP6STDLIBS) \
1608        $(APP6STDLIB) $(STDLIB6)
1609
1610
1611.IF "$(APP6TARGET)" == "loader"
1612    $(COMMAND_ECHO)+$(PERL) loader.pl $@
1613    $(COMMAND_ECHO)+$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
1614    $(COMMAND_ECHO)+$(RM) $@
1615    $(COMMAND_ECHO)+$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
1616.ENDIF          # "$(TARGET)" == "setup"
1617
1618.ENDIF          # "$(GUI)" == "OS2"
1619
1620.ENDIF          # "$(APP6TARGETN)"!=""
1621
1622# New rule for automatic run targets of unit test targets
1623.IF "$(APP6TEST)" == "enabled" &&  "$(APP6TARGET)" != ""
1624
1625$(APP6TARGET)_run: $(APP6TARGETN)
1626    $(COMMAND_ECHO) $(AUGMENT_LIBRARY_PATH_LOCAL) $(APP6TARGETN) --gtest_output="xml:$(BIN)/$(APP6TARGET)_result.xml"
1627
1628.ENDIF
1629
1630
1631# Instruction for linking
1632# unroll begin
1633
1634.IF "$(GUI)" == "OS2" && "$(TARGETTYPE)" == "GUI"
1635APP7DEF = $(MISC)/$(APP7TARGET).def
1636.ENDIF
1637
1638.IF "$(APP7LINKTYPE)" != ""
1639#must be either STATIC or SHARED
1640APP7LINKTYPEFLAG=$(APPLINK$(APP7LINKTYPE))
1641.ENDIF
1642
1643# decide how to link
1644.IF "$(APP7CODETYPE)"=="C"
1645APP7LINKER=$(LINKC)
1646APP7STDLIB=$(subst,CPPRUNTIME, $(STDLIB))
1647APP7LINKFLAGS+=$(LINKCFLAGS)
1648.ELSE           # "$(APP7CODETYPE)"=="C"
1649APP7LINKER=$(LINK)
1650APP7STDLIB=$(subst,CPPRUNTIME,$(STDLIBCPP) $(STDLIB))
1651APP7LINKFLAGS+=$(LINKFLAGS)
1652.ENDIF          # "$(APP7CODETYPE)"=="C"
1653
1654APP7RPATH*=OOO
1655LINKFLAGSRUNPATH_$(APP7RPATH)*=/ERROR:/Bad_APP7RPATH_value
1656.IF "$(OS)" != "MACOSX"
1657APP7LINKFLAGS+=$(LINKFLAGSRUNPATH_$(APP7RPATH))
1658.ENDIF
1659
1660.IF "$(APP7STACK)" != ""
1661.IF "$(LINKFLAGSTACK)" != ""
1662APP7STACKN=$(LINKFLAGSTACK)$(APP7STACK)
1663.ENDIF
1664.ELSE
1665APP7STACKN=
1666.ENDIF
1667
1668.IF "$(APP7NOSAL)"==""
1669.IF "$(TARGETTYPE)" == "GUI"
1670APP7OBJS+= $(STDOBJVCL)
1671.ENDIF
1672.ENDIF
1673
1674.IF "$(GUI)$(COM)" == "WNTGCC"
1675APP7RESO=
1676.IF "$(APP7LINKRES)" != "" || "$(APP7RES)" != ""
1677APP7RESO=$(MISC)/$(APP7TARGET:b)_res.o
1678.ENDIF
1679.ENDIF
1680
1681.IF "$(GUI)" == "UNX"
1682APP7DEPN+:=$(APP7DEPNU)
1683USE_APP7DEF=
1684.ENDIF
1685
1686.IF "$(APP7TARGETN)"!=""
1687
1688.IF "$(APP7PRODUCTNAME)"!=""
1689APP7PRODUCTDEF+:=-DPRODUCT_NAME=\"$(APP7PRODUCTNAME)\"
1690.ENDIF          # "$(APP7PRODUCTNAME)"!=""
1691
1692.IF "$(linkinc)"!=""
1693.IF "$(GUI)"=="WNT" || "$(GUI)"=="OS2"
1694.IF "$(APP7LIBS)"!=""
1695$(MISC)/$(APP7TARGET)_linkinc.ls .PHONY:
1696    @@-$(RM) $@
1697    sed -f $(SOLARENV)/bin/chrel.sed $(foreach,i,$(APP7LIBS) $(i:s/.lib/.lin/)) >> $@
1698.ENDIF          #"$(APP7LIBS)"!=""
1699.ENDIF
1700
1701LINKINCTARGETS+=$(MISC)/$(APP7TARGETN:b)_linkinc.ls
1702$(APP7TARGETN) : $(LINKINCTARGETS)
1703.ENDIF          # "$(linkinc)"!=""
1704
1705# Allow for target specific LIBSALCPPRT override
1706APP7LIBSALCPPRT*=$(LIBSALCPPRT)
1707
1708$(APP7TARGETN): $(APP7OBJS) $(APP7LIBS) \
1709    $(APP7RES) \
1710    $(APP7ICON) $(APP7DEPN) $(USE_APP7DEF)
1711    @echo "Making:   " $(@:f)
1712.IF "$(GUI)"=="UNX"
1713.IF "$(OS)"=="MACOSX"
1714    @echo unx
1715    @-$(RM) $(MISC)/$(@:b).list
1716    @-$(RM) $(MISC)/$(TARGET).$(@:b)_7.cmd
1717    @-$(RM) $(MISC)/$(@:b).strip
1718    @echo $(STDSLO) $(APP7OBJS:s/.obj/.o/) \
1719    `cat /dev/null $(APP7LIBS) | sed s\#$(ROUT)\#$(OUT)\#g` | tr -s " " "\n" > $(MISC)/$(@:b).list
1720    @echo -n $(APP7LINKER) $(APP7LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) -o $@ \
1721    $(APP7LINKTYPEFLAG) $(APP7STDLIBS) $(APP7STDLIB) $(STDLIB7) -filelist $(MISC)/$(@:b).list > $(MISC)/$(TARGET).$(@:b)_7.cmd
1722    @$(PERL) $(SOLARENV)/bin/macosx-dylib-link-list.pl \
1723        `cat $(MISC)/$(TARGET).$(@:b)_7.cmd` \
1724        >> $(MISC)/$(TARGET).$(@:b)_7.cmd
1725  .IF "$(VERBOSE)" == "TRUE"
1726    @cat $(MISC)/$(TARGET).$(@:b)_7.cmd
1727  .ENDIF
1728    @+source $(MISC)/$(TARGET).$(@:b)_7.cmd
1729# Need to strip __objcInit symbol to avoid duplicate symbols when loading
1730# libraries at runtime
1731    @-$(CC_PATH)nm $@ | grep -v ' U ' | $(AWK) '{ print $$NF }' | grep -F -x '__objcInit' > $(MISC)/$(@:b).strip
1732    @$(CC_PATH)strip -i -R $(MISC)/$(@:b).strip -X $@
1733    @ls -l $@
1734    @$(PERL) $(SOLARENV)/bin/macosx-change-install-names.pl \
1735        app $(APP7RPATH) $@
1736.IF "$(TARGETTYPE)"=="GUI"
1737    @echo "Making:   " $(@:f).app
1738    @macosx-create-bundle $@
1739.ENDIF      # "$(TARGETTYPE)"=="GUI"
1740.ELSE       # "$(OS)"=="MACOSX"
1741    @echo unx
1742    @-$(RM) $(MISC)/$(TARGET).$(@:b)_7.cmd
1743    @echo $(APP7LINKER) $(APP7LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
1744    $(APP7OBJS:s/.obj/.o/) '\' >  $(MISC)/$(TARGET).$(@:b)_7.cmd
1745    @cat $(mktmp /dev/null $(APP7LIBS)) | xargs -n 1 cat | sed s\#$(ROUT)\#$(OUT)\#g | sed 's#$$# \\#'  >> $(MISC)/$(TARGET).$(@:b)_7.cmd
1746    @echo $(APP7LINKTYPEFLAG) $(APP7LIBSALCPPRT) $(APP7STDLIBS) $(APP7STDLIB) $(STDLIB7) -o $@ >> $(MISC)/$(TARGET).$(@:b)_7.cmd
1747  .IF "$(VERBOSE)" == "TRUE"
1748    @cat $(MISC)/$(TARGET).$(@:b)_7.cmd
1749  .ENDIF
1750    @+source $(MISC)/$(TARGET).$(@:b)_7.cmd
1751  .IF "$(VERBOSE)" == "TRUE"
1752    @ls -l $@
1753  .ENDIF
1754.ENDIF      # "$(OS)"=="MACOSX"
1755.ENDIF
1756.IF "$(GUI)" == "WNT"
1757    @@-$(MKDIR) $(@:d:d)
1758.IF "$(APP7LINKRES)" != ""
1759    @@-$(RM) $(MISC)/$(APP7LINKRES:b).rc
1760.IF "$(APP7ICON)" != ""
1761    @-echo 1 ICON $(EMQ)"$(APP7ICON:s/\/\\/)$(EMQ)" >> $(MISC)/$(APP7LINKRES:b).rc
1762.ENDIF      # "$(APP7ICON)" != ""
1763.IF "$(APP7VERINFO)" != ""
1764    @-echo $(EMQ)#define VERVARIANT $(BUILD) >> $(MISC)/$(APP7LINKRES:b).rc
1765    @-echo $(EMQ)#include  $(EMQ)"$(APP7VERINFO)$(EMQ)" >> $(MISC)/$(APP7LINKRES:b).rc
1766.ENDIF      # "$(APP7VERINFO)" != ""
1767    $(COMMAND_ECHO)$(RC) -DWIN32 $(APP7PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP7LINKRES:b).rc
1768.ENDIF          # "$(APP7LINKRES)" != ""
1769.IF "$(COM)" == "GCC"
1770    @echo mingw
1771.IF "$(APP7LINKRES)" != "" || "$(APP7RES)" != ""
1772    @cat $(APP7LINKRES) $(subst,/res/,/res{$(subst,$(BIN), $(@:d))} $(APP7RES)) >  $(MISC)/$(@:b)_all.res
1773    windres $(MISC)/$(@:b)_all.res $(APP7RESO)
1774.ENDIF
1775    @echo $(LINK) $(LINKFLAGS) $(LINKFLAGSAPP) $(MINGWSSTDOBJ) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
1776        $(APP7BASEX) $(APP7STACKN) -o $@ $(APP7OBJS) \
1777        -Wl,-Map,$(MISC)/$(@:b).map $(STDOBJ) $(APP7RESO) \
1778        `$(TYPE) /dev/null $(APP7LIBS) | sed s#$(ROUT)#$(OUT)#g` \
1779        $(APP_LINKTYPE) $(APP7LIBSALCPPRT) \
1780        -Wl,--start-group $(APP7STDLIBS) -Wl,--end-group $(APP7STDLIB) \
1781        $(STDLIB7) $(MINGWSSTDENDOBJ) > $(MISC)/$(TARGET).$(@:b)_7.cmd
1782  # need this empty line, else dmake somehow gets confused by the .IFs and .ENDIFs
1783  .IF "$(VERBOSE)" == "TRUE"
1784    @$(TYPE)  $(MISC)/$(TARGET).$(@:b)_7.cmd
1785  .ENDIF
1786    @+source $(MISC)/$(TARGET).$(@:b)_7.cmd
1787    @ls -l $@
1788.ELSE   # "$(COM)" == "GCC"
1789.IF "$(linkinc)" == ""
1790    $(COMMAND_ECHO)$(APP7LINKER) @$(mktmp \
1791        $(APP7LINKFLAGS) \
1792        $(LINKFLAGSAPP) $(APP7BASEX) \
1793        $(APP7STACKN) \
1794        -out:$@ \
1795        -map:$(MISC)/{$(subst,/,_ $(APP7TARGET)).map} \
1796        $(STDOBJ) \
1797        $(APP7LINKRES) \
1798        $(APP7RES) \
1799        $(APP7OBJS) \
1800        $(APP7LIBS) \
1801        $(APP7STDLIBS) \
1802        $(APP7STDLIB) $(STDLIB7) \
1803        )
1804    @-echo linking $@.manifest ...
1805.IF "$(VISTA_MANIFEST)"!=""
1806    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -manifest $(TRUSTED_MANIFEST_LOCATION)/trustedinfo.manifest -out:$@.tmanifest$(EMQ) $(FI)
1807    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.tmanifest -outputresource:$@$(EMQ);1 $(FI)
1808.ELSE
1809    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -outputresource:$@$(EMQ);1 $(FI)
1810.ENDIF # "$(VISTA_MANIFEST)"!=""
1811    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(RM:s/+//) $@.manifest $(FI)
1812    $(COMMAND_ECHO)$(IFEXIST) $@.tmanifest $(THEN) $(RM:s/+//) $@.tmanifest $(FI)
1813.ELSE
1814        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP7TARGET).lnk
1815        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP7TARGET).lst
1816        $(COMMAND_ECHO)-$(RM) $(MISC)\linkobj.lst
1817        for %_i in ($(MISC)\*.obj) do type %_i >> $(MISC)\linkobj.lst
1818    type $(mktmp,$(MISC)\$(APP7TARGET).lst
1819        $(APP7LINKFLAGS) \
1820        $(LINKFLAGSAPP) $(APP7BASEX) \
1821        $(APP7STACKN) \
1822        -out:$@ \
1823        $(STDOBJ) \
1824        $(APP7LINKRES) \
1825        $(APP7RES) \
1826        $(APP7OBJS) \
1827        $(APP7LIBS) \
1828        $(APP7STDLIBS) \
1829        $(APP7STDLIB) $(STDLIB7))
1830        $(COMMAND_ECHO)$(SED)$(SED) -e 's/\(\.\.\\\)\{2,4\}/..\\/g' $(MISC)\$(APP7TARGETN:b)_linkobj.lst >> $(MISC)\$(APP7TARGET).lst
1831        $(COMMAND_ECHO)$(SED)$(IFEXIST) $(MISC)/$(APP7TARGET).lst $(THEN) type $(MISC)/$(APP7TARGET).lst  >> $(MISC)/$(APP7TARGET).lnk $(FI)
1832        $(COMMAND_ECHO)$(SED)$(APP7LINKER) @$(MISC)\$(APP7TARGET).lnk
1833.ENDIF      # "$(linkinc)" == ""
1834.ENDIF      # "$(COM)" == "GCC"
1835.IF "$(APP7TARGET)" == "loader"
1836    $(COMMAND_ECHO)$(PERL) loader.pl $@
1837    $(COMMAND_ECHO)$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
1838    $(COMMAND_ECHO)$(RM) $@
1839    $(COMMAND_ECHO)$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
1840.ENDIF          # "$(TARGET)" == "setup"
1841
1842.ENDIF          # "$(GUI)" == "WNT"
1843
1844.IF "$(GUI)" == "OS2"
1845    @+-$(MKDIR) $(@:d:d) > $(NULLDEV)
1846.IF "$(APP7LINKRES)" != ""
1847    @+-$(RM) $(MISC)/$(APP7LINKRES:b).rc > $(NULLDEV)
1848.IF "$(APP7ICON)" != ""
1849    @-+echo ICON 1 $(EMQ)"$(APP7ICON:s#/#\\\\#)$(EMQ)" >> $(MISC)$/$(APP7LINKRES:b).rc
1850.ENDIF      # "$(APP7ICON)" != ""
1851.IF "$(APP7VERINFO)" != ""
1852    @-+echo $(EMQ)#define VERVARIANT    $(BUILD) >> $(MISC)/$(APP7LINKRES:b).rc
1853    @-+echo $(EMQ)#include  $(EMQ)"$(APP7VERINFO)$(EMQ)" >> $(MISC)/$(APP7LINKRES:b).rc
1854.ENDIF      # "$(APP7VERINFO)" != ""
1855    $(COMMAND_ECHO)$(RC) -r -DOS2 $(APP7PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP7LINKRES:b).rc
1856.ENDIF          # "$(APP7LINKRES)" != ""
1857
1858.IF "$(TARGETTYPE)" == "GUI"
1859    @echo NAME $(APP7TARGET) WINDOWAPI > $(MISC)/$(APP7TARGET).def
1860.ENDIF
1861
1862    $(COMMAND_ECHO)$(APP7LINKER) -v \
1863        $(APP7LINKFLAGS) \
1864        $(LINKFLAGSAPP) $(APP7BASEX) \
1865        $(APP7STACKN) \
1866        -o $@ \
1867        -Zmap -L$(LB) \
1868        -L$(SOLARVERSION)/$(INPATH)/lib \
1869        $(STDOBJ) \
1870        $(APP7LINKRES) \
1871        $(APP7RES) \
1872        $(APP7DEF) \
1873        $(APP7OBJS) \
1874        $(APP7LIBS) \
1875        $(APP7STDLIBS) \
1876        $(APP7STDLIB) $(STDLIB7)
1877
1878
1879.IF "$(APP7TARGET)" == "loader"
1880    $(COMMAND_ECHO)+$(PERL) loader.pl $@
1881    $(COMMAND_ECHO)+$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
1882    $(COMMAND_ECHO)+$(RM) $@
1883    $(COMMAND_ECHO)+$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
1884.ENDIF          # "$(TARGET)" == "setup"
1885
1886.ENDIF          # "$(GUI)" == "OS2"
1887
1888.ENDIF          # "$(APP7TARGETN)"!=""
1889
1890# New rule for automatic run targets of unit test targets
1891.IF "$(APP7TEST)" == "enabled" &&  "$(APP7TARGET)" != ""
1892
1893$(APP7TARGET)_run: $(APP7TARGETN)
1894    $(COMMAND_ECHO) $(AUGMENT_LIBRARY_PATH_LOCAL) $(APP7TARGETN) --gtest_output="xml:$(BIN)/$(APP7TARGET)_result.xml"
1895
1896.ENDIF
1897
1898
1899# Instruction for linking
1900# unroll begin
1901
1902.IF "$(GUI)" == "OS2" && "$(TARGETTYPE)" == "GUI"
1903APP8DEF = $(MISC)/$(APP8TARGET).def
1904.ENDIF
1905
1906.IF "$(APP8LINKTYPE)" != ""
1907#must be either STATIC or SHARED
1908APP8LINKTYPEFLAG=$(APPLINK$(APP8LINKTYPE))
1909.ENDIF
1910
1911# decide how to link
1912.IF "$(APP8CODETYPE)"=="C"
1913APP8LINKER=$(LINKC)
1914APP8STDLIB=$(subst,CPPRUNTIME, $(STDLIB))
1915APP8LINKFLAGS+=$(LINKCFLAGS)
1916.ELSE           # "$(APP8CODETYPE)"=="C"
1917APP8LINKER=$(LINK)
1918APP8STDLIB=$(subst,CPPRUNTIME,$(STDLIBCPP) $(STDLIB))
1919APP8LINKFLAGS+=$(LINKFLAGS)
1920.ENDIF          # "$(APP8CODETYPE)"=="C"
1921
1922APP8RPATH*=OOO
1923LINKFLAGSRUNPATH_$(APP8RPATH)*=/ERROR:/Bad_APP8RPATH_value
1924.IF "$(OS)" != "MACOSX"
1925APP8LINKFLAGS+=$(LINKFLAGSRUNPATH_$(APP8RPATH))
1926.ENDIF
1927
1928.IF "$(APP8STACK)" != ""
1929.IF "$(LINKFLAGSTACK)" != ""
1930APP8STACKN=$(LINKFLAGSTACK)$(APP8STACK)
1931.ENDIF
1932.ELSE
1933APP8STACKN=
1934.ENDIF
1935
1936.IF "$(APP8NOSAL)"==""
1937.IF "$(TARGETTYPE)" == "GUI"
1938APP8OBJS+= $(STDOBJVCL)
1939.ENDIF
1940.ENDIF
1941
1942.IF "$(GUI)$(COM)" == "WNTGCC"
1943APP8RESO=
1944.IF "$(APP8LINKRES)" != "" || "$(APP8RES)" != ""
1945APP8RESO=$(MISC)/$(APP8TARGET:b)_res.o
1946.ENDIF
1947.ENDIF
1948
1949.IF "$(GUI)" == "UNX"
1950APP8DEPN+:=$(APP8DEPNU)
1951USE_APP8DEF=
1952.ENDIF
1953
1954.IF "$(APP8TARGETN)"!=""
1955
1956.IF "$(APP8PRODUCTNAME)"!=""
1957APP8PRODUCTDEF+:=-DPRODUCT_NAME=\"$(APP8PRODUCTNAME)\"
1958.ENDIF          # "$(APP8PRODUCTNAME)"!=""
1959
1960.IF "$(linkinc)"!=""
1961.IF "$(GUI)"=="WNT" || "$(GUI)"=="OS2"
1962.IF "$(APP8LIBS)"!=""
1963$(MISC)/$(APP8TARGET)_linkinc.ls .PHONY:
1964    @@-$(RM) $@
1965    sed -f $(SOLARENV)/bin/chrel.sed $(foreach,i,$(APP8LIBS) $(i:s/.lib/.lin/)) >> $@
1966.ENDIF          #"$(APP8LIBS)"!=""
1967.ENDIF
1968
1969LINKINCTARGETS+=$(MISC)/$(APP8TARGETN:b)_linkinc.ls
1970$(APP8TARGETN) : $(LINKINCTARGETS)
1971.ENDIF          # "$(linkinc)"!=""
1972
1973# Allow for target specific LIBSALCPPRT override
1974APP8LIBSALCPPRT*=$(LIBSALCPPRT)
1975
1976$(APP8TARGETN): $(APP8OBJS) $(APP8LIBS) \
1977    $(APP8RES) \
1978    $(APP8ICON) $(APP8DEPN) $(USE_APP8DEF)
1979    @echo "Making:   " $(@:f)
1980.IF "$(GUI)"=="UNX"
1981.IF "$(OS)"=="MACOSX"
1982    @echo unx
1983    @-$(RM) $(MISC)/$(@:b).list
1984    @-$(RM) $(MISC)/$(TARGET).$(@:b)_8.cmd
1985    @-$(RM) $(MISC)/$(@:b).strip
1986    @echo $(STDSLO) $(APP8OBJS:s/.obj/.o/) \
1987    `cat /dev/null $(APP8LIBS) | sed s\#$(ROUT)\#$(OUT)\#g` | tr -s " " "\n" > $(MISC)/$(@:b).list
1988    @echo -n $(APP8LINKER) $(APP8LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) -o $@ \
1989    $(APP8LINKTYPEFLAG) $(APP8STDLIBS) $(APP8STDLIB) $(STDLIB8) -filelist $(MISC)/$(@:b).list > $(MISC)/$(TARGET).$(@:b)_8.cmd
1990    @$(PERL) $(SOLARENV)/bin/macosx-dylib-link-list.pl \
1991        `cat $(MISC)/$(TARGET).$(@:b)_8.cmd` \
1992        >> $(MISC)/$(TARGET).$(@:b)_8.cmd
1993  .IF "$(VERBOSE)" == "TRUE"
1994    @cat $(MISC)/$(TARGET).$(@:b)_8.cmd
1995  .ENDIF
1996    @+source $(MISC)/$(TARGET).$(@:b)_8.cmd
1997# Need to strip __objcInit symbol to avoid duplicate symbols when loading
1998# libraries at runtime
1999    @-$(CC_PATH)nm $@ | grep -v ' U ' | $(AWK) '{ print $$NF }' | grep -F -x '__objcInit' > $(MISC)/$(@:b).strip
2000    @$(CC_PATH)strip -i -R $(MISC)/$(@:b).strip -X $@
2001    @ls -l $@
2002    @$(PERL) $(SOLARENV)/bin/macosx-change-install-names.pl \
2003        app $(APP8RPATH) $@
2004.IF "$(TARGETTYPE)"=="GUI"
2005    @echo "Making:   " $(@:f).app
2006    @macosx-create-bundle $@
2007.ENDIF      # "$(TARGETTYPE)"=="GUI"
2008.ELSE       # "$(OS)"=="MACOSX"
2009    @echo unx
2010    @-$(RM) $(MISC)/$(TARGET).$(@:b)_8.cmd
2011    @echo $(APP8LINKER) $(APP8LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
2012    $(APP8OBJS:s/.obj/.o/) '\' >  $(MISC)/$(TARGET).$(@:b)_8.cmd
2013    @cat $(mktmp /dev/null $(APP8LIBS)) | xargs -n 1 cat | sed s\#$(ROUT)\#$(OUT)\#g | sed 's#$$# \\#'  >> $(MISC)/$(TARGET).$(@:b)_8.cmd
2014    @echo $(APP8LINKTYPEFLAG) $(APP8LIBSALCPPRT) $(APP8STDLIBS) $(APP8STDLIB) $(STDLIB8) -o $@ >> $(MISC)/$(TARGET).$(@:b)_8.cmd
2015  .IF "$(VERBOSE)" == "TRUE"
2016    @cat $(MISC)/$(TARGET).$(@:b)_8.cmd
2017  .ENDIF
2018    @+source $(MISC)/$(TARGET).$(@:b)_8.cmd
2019  .IF "$(VERBOSE)" == "TRUE"
2020    @ls -l $@
2021  .ENDIF
2022.ENDIF      # "$(OS)"=="MACOSX"
2023.ENDIF
2024.IF "$(GUI)" == "WNT"
2025    @@-$(MKDIR) $(@:d:d)
2026.IF "$(APP8LINKRES)" != ""
2027    @@-$(RM) $(MISC)/$(APP8LINKRES:b).rc
2028.IF "$(APP8ICON)" != ""
2029    @-echo 1 ICON $(EMQ)"$(APP8ICON:s/\/\\/)$(EMQ)" >> $(MISC)/$(APP8LINKRES:b).rc
2030.ENDIF      # "$(APP8ICON)" != ""
2031.IF "$(APP8VERINFO)" != ""
2032    @-echo $(EMQ)#define VERVARIANT $(BUILD) >> $(MISC)/$(APP8LINKRES:b).rc
2033    @-echo $(EMQ)#include  $(EMQ)"$(APP8VERINFO)$(EMQ)" >> $(MISC)/$(APP8LINKRES:b).rc
2034.ENDIF      # "$(APP8VERINFO)" != ""
2035    $(COMMAND_ECHO)$(RC) -DWIN32 $(APP8PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP8LINKRES:b).rc
2036.ENDIF          # "$(APP8LINKRES)" != ""
2037.IF "$(COM)" == "GCC"
2038    @echo mingw
2039.IF "$(APP8LINKRES)" != "" || "$(APP8RES)" != ""
2040    @cat $(APP8LINKRES) $(subst,/res/,/res{$(subst,$(BIN), $(@:d))} $(APP8RES)) >  $(MISC)/$(@:b)_all.res
2041    windres $(MISC)/$(@:b)_all.res $(APP8RESO)
2042.ENDIF
2043    @echo $(LINK) $(LINKFLAGS) $(LINKFLAGSAPP) $(MINGWSSTDOBJ) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
2044        $(APP8BASEX) $(APP8STACKN) -o $@ $(APP8OBJS) \
2045        -Wl,-Map,$(MISC)/$(@:b).map $(STDOBJ) $(APP8RESO) \
2046        `$(TYPE) /dev/null $(APP8LIBS) | sed s#$(ROUT)#$(OUT)#g` \
2047        $(APP_LINKTYPE) $(APP8LIBSALCPPRT) \
2048        -Wl,--start-group $(APP8STDLIBS) -Wl,--end-group $(APP8STDLIB) \
2049        $(STDLIB8) $(MINGWSSTDENDOBJ) > $(MISC)/$(TARGET).$(@:b)_8.cmd
2050  # need this empty line, else dmake somehow gets confused by the .IFs and .ENDIFs
2051  .IF "$(VERBOSE)" == "TRUE"
2052    @$(TYPE)  $(MISC)/$(TARGET).$(@:b)_8.cmd
2053  .ENDIF
2054    @+source $(MISC)/$(TARGET).$(@:b)_8.cmd
2055    @ls -l $@
2056.ELSE   # "$(COM)" == "GCC"
2057.IF "$(linkinc)" == ""
2058    $(COMMAND_ECHO)$(APP8LINKER) @$(mktmp \
2059        $(APP8LINKFLAGS) \
2060        $(LINKFLAGSAPP) $(APP8BASEX) \
2061        $(APP8STACKN) \
2062        -out:$@ \
2063        -map:$(MISC)/{$(subst,/,_ $(APP8TARGET)).map} \
2064        $(STDOBJ) \
2065        $(APP8LINKRES) \
2066        $(APP8RES) \
2067        $(APP8OBJS) \
2068        $(APP8LIBS) \
2069        $(APP8STDLIBS) \
2070        $(APP8STDLIB) $(STDLIB8) \
2071        )
2072    @-echo linking $@.manifest ...
2073.IF "$(VISTA_MANIFEST)"!=""
2074    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -manifest $(TRUSTED_MANIFEST_LOCATION)/trustedinfo.manifest -out:$@.tmanifest$(EMQ) $(FI)
2075    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.tmanifest -outputresource:$@$(EMQ);1 $(FI)
2076.ELSE
2077    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -outputresource:$@$(EMQ);1 $(FI)
2078.ENDIF # "$(VISTA_MANIFEST)"!=""
2079    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(RM:s/+//) $@.manifest $(FI)
2080    $(COMMAND_ECHO)$(IFEXIST) $@.tmanifest $(THEN) $(RM:s/+//) $@.tmanifest $(FI)
2081.ELSE
2082        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP8TARGET).lnk
2083        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP8TARGET).lst
2084        $(COMMAND_ECHO)-$(RM) $(MISC)\linkobj.lst
2085        for %_i in ($(MISC)\*.obj) do type %_i >> $(MISC)\linkobj.lst
2086    type $(mktmp,$(MISC)\$(APP8TARGET).lst
2087        $(APP8LINKFLAGS) \
2088        $(LINKFLAGSAPP) $(APP8BASEX) \
2089        $(APP8STACKN) \
2090        -out:$@ \
2091        $(STDOBJ) \
2092        $(APP8LINKRES) \
2093        $(APP8RES) \
2094        $(APP8OBJS) \
2095        $(APP8LIBS) \
2096        $(APP8STDLIBS) \
2097        $(APP8STDLIB) $(STDLIB8))
2098        $(COMMAND_ECHO)$(SED)$(SED) -e 's/\(\.\.\\\)\{2,4\}/..\\/g' $(MISC)\$(APP8TARGETN:b)_linkobj.lst >> $(MISC)\$(APP8TARGET).lst
2099        $(COMMAND_ECHO)$(SED)$(IFEXIST) $(MISC)/$(APP8TARGET).lst $(THEN) type $(MISC)/$(APP8TARGET).lst  >> $(MISC)/$(APP8TARGET).lnk $(FI)
2100        $(COMMAND_ECHO)$(SED)$(APP8LINKER) @$(MISC)\$(APP8TARGET).lnk
2101.ENDIF      # "$(linkinc)" == ""
2102.ENDIF      # "$(COM)" == "GCC"
2103.IF "$(APP8TARGET)" == "loader"
2104    $(COMMAND_ECHO)$(PERL) loader.pl $@
2105    $(COMMAND_ECHO)$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
2106    $(COMMAND_ECHO)$(RM) $@
2107    $(COMMAND_ECHO)$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
2108.ENDIF          # "$(TARGET)" == "setup"
2109
2110.ENDIF          # "$(GUI)" == "WNT"
2111
2112.IF "$(GUI)" == "OS2"
2113    @+-$(MKDIR) $(@:d:d) > $(NULLDEV)
2114.IF "$(APP8LINKRES)" != ""
2115    @+-$(RM) $(MISC)/$(APP8LINKRES:b).rc > $(NULLDEV)
2116.IF "$(APP8ICON)" != ""
2117    @-+echo ICON 1 $(EMQ)"$(APP8ICON:s#/#\\\\#)$(EMQ)" >> $(MISC)$/$(APP8LINKRES:b).rc
2118.ENDIF      # "$(APP8ICON)" != ""
2119.IF "$(APP8VERINFO)" != ""
2120    @-+echo $(EMQ)#define VERVARIANT    $(BUILD) >> $(MISC)/$(APP8LINKRES:b).rc
2121    @-+echo $(EMQ)#include  $(EMQ)"$(APP8VERINFO)$(EMQ)" >> $(MISC)/$(APP8LINKRES:b).rc
2122.ENDIF      # "$(APP8VERINFO)" != ""
2123    $(COMMAND_ECHO)$(RC) -r -DOS2 $(APP8PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP8LINKRES:b).rc
2124.ENDIF          # "$(APP8LINKRES)" != ""
2125
2126.IF "$(TARGETTYPE)" == "GUI"
2127    @echo NAME $(APP8TARGET) WINDOWAPI > $(MISC)/$(APP8TARGET).def
2128.ENDIF
2129
2130    $(COMMAND_ECHO)$(APP8LINKER) -v \
2131        $(APP8LINKFLAGS) \
2132        $(LINKFLAGSAPP) $(APP8BASEX) \
2133        $(APP8STACKN) \
2134        -o $@ \
2135        -Zmap -L$(LB) \
2136        -L$(SOLARVERSION)/$(INPATH)/lib \
2137        $(STDOBJ) \
2138        $(APP8LINKRES) \
2139        $(APP8RES) \
2140        $(APP8DEF) \
2141        $(APP8OBJS) \
2142        $(APP8LIBS) \
2143        $(APP8STDLIBS) \
2144        $(APP8STDLIB) $(STDLIB8)
2145
2146
2147.IF "$(APP8TARGET)" == "loader"
2148    $(COMMAND_ECHO)+$(PERL) loader.pl $@
2149    $(COMMAND_ECHO)+$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
2150    $(COMMAND_ECHO)+$(RM) $@
2151    $(COMMAND_ECHO)+$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
2152.ENDIF          # "$(TARGET)" == "setup"
2153
2154.ENDIF          # "$(GUI)" == "OS2"
2155
2156.ENDIF          # "$(APP8TARGETN)"!=""
2157
2158# New rule for automatic run targets of unit test targets
2159.IF "$(APP8TEST)" == "enabled" &&  "$(APP8TARGET)" != ""
2160
2161$(APP8TARGET)_run: $(APP8TARGETN)
2162    $(COMMAND_ECHO) $(AUGMENT_LIBRARY_PATH_LOCAL) $(APP8TARGETN) --gtest_output="xml:$(BIN)/$(APP8TARGET)_result.xml"
2163
2164.ENDIF
2165
2166
2167# Instruction for linking
2168# unroll begin
2169
2170.IF "$(GUI)" == "OS2" && "$(TARGETTYPE)" == "GUI"
2171APP9DEF = $(MISC)/$(APP9TARGET).def
2172.ENDIF
2173
2174.IF "$(APP9LINKTYPE)" != ""
2175#must be either STATIC or SHARED
2176APP9LINKTYPEFLAG=$(APPLINK$(APP9LINKTYPE))
2177.ENDIF
2178
2179# decide how to link
2180.IF "$(APP9CODETYPE)"=="C"
2181APP9LINKER=$(LINKC)
2182APP9STDLIB=$(subst,CPPRUNTIME, $(STDLIB))
2183APP9LINKFLAGS+=$(LINKCFLAGS)
2184.ELSE           # "$(APP9CODETYPE)"=="C"
2185APP9LINKER=$(LINK)
2186APP9STDLIB=$(subst,CPPRUNTIME,$(STDLIBCPP) $(STDLIB))
2187APP9LINKFLAGS+=$(LINKFLAGS)
2188.ENDIF          # "$(APP9CODETYPE)"=="C"
2189
2190APP9RPATH*=OOO
2191LINKFLAGSRUNPATH_$(APP9RPATH)*=/ERROR:/Bad_APP9RPATH_value
2192.IF "$(OS)" != "MACOSX"
2193APP9LINKFLAGS+=$(LINKFLAGSRUNPATH_$(APP9RPATH))
2194.ENDIF
2195
2196.IF "$(APP9STACK)" != ""
2197.IF "$(LINKFLAGSTACK)" != ""
2198APP9STACKN=$(LINKFLAGSTACK)$(APP9STACK)
2199.ENDIF
2200.ELSE
2201APP9STACKN=
2202.ENDIF
2203
2204.IF "$(APP9NOSAL)"==""
2205.IF "$(TARGETTYPE)" == "GUI"
2206APP9OBJS+= $(STDOBJVCL)
2207.ENDIF
2208.ENDIF
2209
2210.IF "$(GUI)$(COM)" == "WNTGCC"
2211APP9RESO=
2212.IF "$(APP9LINKRES)" != "" || "$(APP9RES)" != ""
2213APP9RESO=$(MISC)/$(APP9TARGET:b)_res.o
2214.ENDIF
2215.ENDIF
2216
2217.IF "$(GUI)" == "UNX"
2218APP9DEPN+:=$(APP9DEPNU)
2219USE_APP9DEF=
2220.ENDIF
2221
2222.IF "$(APP9TARGETN)"!=""
2223
2224.IF "$(APP9PRODUCTNAME)"!=""
2225APP9PRODUCTDEF+:=-DPRODUCT_NAME=\"$(APP9PRODUCTNAME)\"
2226.ENDIF          # "$(APP9PRODUCTNAME)"!=""
2227
2228.IF "$(linkinc)"!=""
2229.IF "$(GUI)"=="WNT" || "$(GUI)"=="OS2"
2230.IF "$(APP9LIBS)"!=""
2231$(MISC)/$(APP9TARGET)_linkinc.ls .PHONY:
2232    @@-$(RM) $@
2233    sed -f $(SOLARENV)/bin/chrel.sed $(foreach,i,$(APP9LIBS) $(i:s/.lib/.lin/)) >> $@
2234.ENDIF          #"$(APP9LIBS)"!=""
2235.ENDIF
2236
2237LINKINCTARGETS+=$(MISC)/$(APP9TARGETN:b)_linkinc.ls
2238$(APP9TARGETN) : $(LINKINCTARGETS)
2239.ENDIF          # "$(linkinc)"!=""
2240
2241# Allow for target specific LIBSALCPPRT override
2242APP9LIBSALCPPRT*=$(LIBSALCPPRT)
2243
2244$(APP9TARGETN): $(APP9OBJS) $(APP9LIBS) \
2245    $(APP9RES) \
2246    $(APP9ICON) $(APP9DEPN) $(USE_APP9DEF)
2247    @echo "Making:   " $(@:f)
2248.IF "$(GUI)"=="UNX"
2249.IF "$(OS)"=="MACOSX"
2250    @echo unx
2251    @-$(RM) $(MISC)/$(@:b).list
2252    @-$(RM) $(MISC)/$(TARGET).$(@:b)_9.cmd
2253    @-$(RM) $(MISC)/$(@:b).strip
2254    @echo $(STDSLO) $(APP9OBJS:s/.obj/.o/) \
2255    `cat /dev/null $(APP9LIBS) | sed s\#$(ROUT)\#$(OUT)\#g` | tr -s " " "\n" > $(MISC)/$(@:b).list
2256    @echo -n $(APP9LINKER) $(APP9LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) -o $@ \
2257    $(APP9LINKTYPEFLAG) $(APP9STDLIBS) $(APP9STDLIB) $(STDLIB9) -filelist $(MISC)/$(@:b).list > $(MISC)/$(TARGET).$(@:b)_9.cmd
2258    @$(PERL) $(SOLARENV)/bin/macosx-dylib-link-list.pl \
2259        `cat $(MISC)/$(TARGET).$(@:b)_9.cmd` \
2260        >> $(MISC)/$(TARGET).$(@:b)_9.cmd
2261  .IF "$(VERBOSE)" == "TRUE"
2262    @cat $(MISC)/$(TARGET).$(@:b)_9.cmd
2263  .ENDIF
2264    @+source $(MISC)/$(TARGET).$(@:b)_9.cmd
2265# Need to strip __objcInit symbol to avoid duplicate symbols when loading
2266# libraries at runtime
2267    @-$(CC_PATH)nm $@ | grep -v ' U ' | $(AWK) '{ print $$NF }' | grep -F -x '__objcInit' > $(MISC)/$(@:b).strip
2268    @$(CC_PATH)strip -i -R $(MISC)/$(@:b).strip -X $@
2269    @ls -l $@
2270    @$(PERL) $(SOLARENV)/bin/macosx-change-install-names.pl \
2271        app $(APP9RPATH) $@
2272.IF "$(TARGETTYPE)"=="GUI"
2273    @echo "Making:   " $(@:f).app
2274    @macosx-create-bundle $@
2275.ENDIF      # "$(TARGETTYPE)"=="GUI"
2276.ELSE       # "$(OS)"=="MACOSX"
2277    @echo unx
2278    @-$(RM) $(MISC)/$(TARGET).$(@:b)_9.cmd
2279    @echo $(APP9LINKER) $(APP9LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
2280    $(APP9OBJS:s/.obj/.o/) '\' >  $(MISC)/$(TARGET).$(@:b)_9.cmd
2281    @cat $(mktmp /dev/null $(APP9LIBS)) | xargs -n 1 cat | sed s\#$(ROUT)\#$(OUT)\#g | sed 's#$$# \\#'  >> $(MISC)/$(TARGET).$(@:b)_9.cmd
2282    @echo $(APP9LINKTYPEFLAG) $(APP9LIBSALCPPRT) $(APP9STDLIBS) $(APP9STDLIB) $(STDLIB9) -o $@ >> $(MISC)/$(TARGET).$(@:b)_9.cmd
2283  .IF "$(VERBOSE)" == "TRUE"
2284    @cat $(MISC)/$(TARGET).$(@:b)_9.cmd
2285  .ENDIF
2286    @+source $(MISC)/$(TARGET).$(@:b)_9.cmd
2287  .IF "$(VERBOSE)" == "TRUE"
2288    @ls -l $@
2289  .ENDIF
2290.ENDIF      # "$(OS)"=="MACOSX"
2291.ENDIF
2292.IF "$(GUI)" == "WNT"
2293    @@-$(MKDIR) $(@:d:d)
2294.IF "$(APP9LINKRES)" != ""
2295    @@-$(RM) $(MISC)/$(APP9LINKRES:b).rc
2296.IF "$(APP9ICON)" != ""
2297    @-echo 1 ICON $(EMQ)"$(APP9ICON:s/\/\\/)$(EMQ)" >> $(MISC)/$(APP9LINKRES:b).rc
2298.ENDIF      # "$(APP9ICON)" != ""
2299.IF "$(APP9VERINFO)" != ""
2300    @-echo $(EMQ)#define VERVARIANT $(BUILD) >> $(MISC)/$(APP9LINKRES:b).rc
2301    @-echo $(EMQ)#include  $(EMQ)"$(APP9VERINFO)$(EMQ)" >> $(MISC)/$(APP9LINKRES:b).rc
2302.ENDIF      # "$(APP9VERINFO)" != ""
2303    $(COMMAND_ECHO)$(RC) -DWIN32 $(APP9PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP9LINKRES:b).rc
2304.ENDIF          # "$(APP9LINKRES)" != ""
2305.IF "$(COM)" == "GCC"
2306    @echo mingw
2307.IF "$(APP9LINKRES)" != "" || "$(APP9RES)" != ""
2308    @cat $(APP9LINKRES) $(subst,/res/,/res{$(subst,$(BIN), $(@:d))} $(APP9RES)) >  $(MISC)/$(@:b)_all.res
2309    windres $(MISC)/$(@:b)_all.res $(APP9RESO)
2310.ENDIF
2311    @echo $(LINK) $(LINKFLAGS) $(LINKFLAGSAPP) $(MINGWSSTDOBJ) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
2312        $(APP9BASEX) $(APP9STACKN) -o $@ $(APP9OBJS) \
2313        -Wl,-Map,$(MISC)/$(@:b).map $(STDOBJ) $(APP9RESO) \
2314        `$(TYPE) /dev/null $(APP9LIBS) | sed s#$(ROUT)#$(OUT)#g` \
2315        $(APP_LINKTYPE) $(APP9LIBSALCPPRT) \
2316        -Wl,--start-group $(APP9STDLIBS) -Wl,--end-group $(APP9STDLIB) \
2317        $(STDLIB9) $(MINGWSSTDENDOBJ) > $(MISC)/$(TARGET).$(@:b)_9.cmd
2318  # need this empty line, else dmake somehow gets confused by the .IFs and .ENDIFs
2319  .IF "$(VERBOSE)" == "TRUE"
2320    @$(TYPE)  $(MISC)/$(TARGET).$(@:b)_9.cmd
2321  .ENDIF
2322    @+source $(MISC)/$(TARGET).$(@:b)_9.cmd
2323    @ls -l $@
2324.ELSE   # "$(COM)" == "GCC"
2325.IF "$(linkinc)" == ""
2326    $(COMMAND_ECHO)$(APP9LINKER) @$(mktmp \
2327        $(APP9LINKFLAGS) \
2328        $(LINKFLAGSAPP) $(APP9BASEX) \
2329        $(APP9STACKN) \
2330        -out:$@ \
2331        -map:$(MISC)/{$(subst,/,_ $(APP9TARGET)).map} \
2332        $(STDOBJ) \
2333        $(APP9LINKRES) \
2334        $(APP9RES) \
2335        $(APP9OBJS) \
2336        $(APP9LIBS) \
2337        $(APP9STDLIBS) \
2338        $(APP9STDLIB) $(STDLIB9) \
2339        )
2340    @-echo linking $@.manifest ...
2341.IF "$(VISTA_MANIFEST)"!=""
2342    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -manifest $(TRUSTED_MANIFEST_LOCATION)/trustedinfo.manifest -out:$@.tmanifest$(EMQ) $(FI)
2343    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.tmanifest -outputresource:$@$(EMQ);1 $(FI)
2344.ELSE
2345    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -outputresource:$@$(EMQ);1 $(FI)
2346.ENDIF # "$(VISTA_MANIFEST)"!=""
2347    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(RM:s/+//) $@.manifest $(FI)
2348    $(COMMAND_ECHO)$(IFEXIST) $@.tmanifest $(THEN) $(RM:s/+//) $@.tmanifest $(FI)
2349.ELSE
2350        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP9TARGET).lnk
2351        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP9TARGET).lst
2352        $(COMMAND_ECHO)-$(RM) $(MISC)\linkobj.lst
2353        for %_i in ($(MISC)\*.obj) do type %_i >> $(MISC)\linkobj.lst
2354    type $(mktmp,$(MISC)\$(APP9TARGET).lst
2355        $(APP9LINKFLAGS) \
2356        $(LINKFLAGSAPP) $(APP9BASEX) \
2357        $(APP9STACKN) \
2358        -out:$@ \
2359        $(STDOBJ) \
2360        $(APP9LINKRES) \
2361        $(APP9RES) \
2362        $(APP9OBJS) \
2363        $(APP9LIBS) \
2364        $(APP9STDLIBS) \
2365        $(APP9STDLIB) $(STDLIB9))
2366        $(COMMAND_ECHO)$(SED)$(SED) -e 's/\(\.\.\\\)\{2,4\}/..\\/g' $(MISC)\$(APP9TARGETN:b)_linkobj.lst >> $(MISC)\$(APP9TARGET).lst
2367        $(COMMAND_ECHO)$(SED)$(IFEXIST) $(MISC)/$(APP9TARGET).lst $(THEN) type $(MISC)/$(APP9TARGET).lst  >> $(MISC)/$(APP9TARGET).lnk $(FI)
2368        $(COMMAND_ECHO)$(SED)$(APP9LINKER) @$(MISC)\$(APP9TARGET).lnk
2369.ENDIF      # "$(linkinc)" == ""
2370.ENDIF      # "$(COM)" == "GCC"
2371.IF "$(APP9TARGET)" == "loader"
2372    $(COMMAND_ECHO)$(PERL) loader.pl $@
2373    $(COMMAND_ECHO)$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
2374    $(COMMAND_ECHO)$(RM) $@
2375    $(COMMAND_ECHO)$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
2376.ENDIF          # "$(TARGET)" == "setup"
2377
2378.ENDIF          # "$(GUI)" == "WNT"
2379
2380.IF "$(GUI)" == "OS2"
2381    @+-$(MKDIR) $(@:d:d) > $(NULLDEV)
2382.IF "$(APP9LINKRES)" != ""
2383    @+-$(RM) $(MISC)/$(APP9LINKRES:b).rc > $(NULLDEV)
2384.IF "$(APP9ICON)" != ""
2385    @-+echo ICON 1 $(EMQ)"$(APP9ICON:s#/#\\\\#)$(EMQ)" >> $(MISC)$/$(APP9LINKRES:b).rc
2386.ENDIF      # "$(APP9ICON)" != ""
2387.IF "$(APP9VERINFO)" != ""
2388    @-+echo $(EMQ)#define VERVARIANT    $(BUILD) >> $(MISC)/$(APP9LINKRES:b).rc
2389    @-+echo $(EMQ)#include  $(EMQ)"$(APP9VERINFO)$(EMQ)" >> $(MISC)/$(APP9LINKRES:b).rc
2390.ENDIF      # "$(APP9VERINFO)" != ""
2391    $(COMMAND_ECHO)$(RC) -r -DOS2 $(APP9PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP9LINKRES:b).rc
2392.ENDIF          # "$(APP9LINKRES)" != ""
2393
2394.IF "$(TARGETTYPE)" == "GUI"
2395    @echo NAME $(APP9TARGET) WINDOWAPI > $(MISC)/$(APP9TARGET).def
2396.ENDIF
2397
2398    $(COMMAND_ECHO)$(APP9LINKER) -v \
2399        $(APP9LINKFLAGS) \
2400        $(LINKFLAGSAPP) $(APP9BASEX) \
2401        $(APP9STACKN) \
2402        -o $@ \
2403        -Zmap -L$(LB) \
2404        -L$(SOLARVERSION)/$(INPATH)/lib \
2405        $(STDOBJ) \
2406        $(APP9LINKRES) \
2407        $(APP9RES) \
2408        $(APP9DEF) \
2409        $(APP9OBJS) \
2410        $(APP9LIBS) \
2411        $(APP9STDLIBS) \
2412        $(APP9STDLIB) $(STDLIB9)
2413
2414
2415.IF "$(APP9TARGET)" == "loader"
2416    $(COMMAND_ECHO)+$(PERL) loader.pl $@
2417    $(COMMAND_ECHO)+$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
2418    $(COMMAND_ECHO)+$(RM) $@
2419    $(COMMAND_ECHO)+$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
2420.ENDIF          # "$(TARGET)" == "setup"
2421
2422.ENDIF          # "$(GUI)" == "OS2"
2423
2424.ENDIF          # "$(APP9TARGETN)"!=""
2425
2426# New rule for automatic run targets of unit test targets
2427.IF "$(APP9TEST)" == "enabled" &&  "$(APP9TARGET)" != ""
2428
2429$(APP9TARGET)_run: $(APP9TARGETN)
2430    $(COMMAND_ECHO) $(AUGMENT_LIBRARY_PATH_LOCAL) $(APP9TARGETN) --gtest_output="xml:$(BIN)/$(APP9TARGET)_result.xml"
2431
2432.ENDIF
2433
2434
2435# Instruction for linking
2436# unroll begin
2437
2438.IF "$(GUI)" == "OS2" && "$(TARGETTYPE)" == "GUI"
2439APP10DEF = $(MISC)/$(APP10TARGET).def
2440.ENDIF
2441
2442.IF "$(APP10LINKTYPE)" != ""
2443#must be either STATIC or SHARED
2444APP10LINKTYPEFLAG=$(APPLINK$(APP10LINKTYPE))
2445.ENDIF
2446
2447# decide how to link
2448.IF "$(APP10CODETYPE)"=="C"
2449APP10LINKER=$(LINKC)
2450APP10STDLIB=$(subst,CPPRUNTIME, $(STDLIB))
2451APP10LINKFLAGS+=$(LINKCFLAGS)
2452.ELSE           # "$(APP10CODETYPE)"=="C"
2453APP10LINKER=$(LINK)
2454APP10STDLIB=$(subst,CPPRUNTIME,$(STDLIBCPP) $(STDLIB))
2455APP10LINKFLAGS+=$(LINKFLAGS)
2456.ENDIF          # "$(APP10CODETYPE)"=="C"
2457
2458APP10RPATH*=OOO
2459LINKFLAGSRUNPATH_$(APP10RPATH)*=/ERROR:/Bad_APP10RPATH_value
2460.IF "$(OS)" != "MACOSX"
2461APP10LINKFLAGS+=$(LINKFLAGSRUNPATH_$(APP10RPATH))
2462.ENDIF
2463
2464.IF "$(APP10STACK)" != ""
2465.IF "$(LINKFLAGSTACK)" != ""
2466APP10STACKN=$(LINKFLAGSTACK)$(APP10STACK)
2467.ENDIF
2468.ELSE
2469APP10STACKN=
2470.ENDIF
2471
2472.IF "$(APP10NOSAL)"==""
2473.IF "$(TARGETTYPE)" == "GUI"
2474APP10OBJS+= $(STDOBJVCL)
2475.ENDIF
2476.ENDIF
2477
2478.IF "$(GUI)$(COM)" == "WNTGCC"
2479APP10RESO=
2480.IF "$(APP10LINKRES)" != "" || "$(APP10RES)" != ""
2481APP10RESO=$(MISC)/$(APP10TARGET:b)_res.o
2482.ENDIF
2483.ENDIF
2484
2485.IF "$(GUI)" == "UNX"
2486APP10DEPN+:=$(APP10DEPNU)
2487USE_APP10DEF=
2488.ENDIF
2489
2490.IF "$(APP10TARGETN)"!=""
2491
2492.IF "$(APP10PRODUCTNAME)"!=""
2493APP10PRODUCTDEF+:=-DPRODUCT_NAME=\"$(APP10PRODUCTNAME)\"
2494.ENDIF          # "$(APP10PRODUCTNAME)"!=""
2495
2496.IF "$(linkinc)"!=""
2497.IF "$(GUI)"=="WNT" || "$(GUI)"=="OS2"
2498.IF "$(APP10LIBS)"!=""
2499$(MISC)/$(APP10TARGET)_linkinc.ls .PHONY:
2500    @@-$(RM) $@
2501    sed -f $(SOLARENV)/bin/chrel.sed $(foreach,i,$(APP10LIBS) $(i:s/.lib/.lin/)) >> $@
2502.ENDIF          #"$(APP10LIBS)"!=""
2503.ENDIF
2504
2505LINKINCTARGETS+=$(MISC)/$(APP10TARGETN:b)_linkinc.ls
2506$(APP10TARGETN) : $(LINKINCTARGETS)
2507.ENDIF          # "$(linkinc)"!=""
2508
2509# Allow for target specific LIBSALCPPRT override
2510APP10LIBSALCPPRT*=$(LIBSALCPPRT)
2511
2512$(APP10TARGETN): $(APP10OBJS) $(APP10LIBS) \
2513    $(APP10RES) \
2514    $(APP10ICON) $(APP10DEPN) $(USE_APP10DEF)
2515    @echo "Making:   " $(@:f)
2516.IF "$(GUI)"=="UNX"
2517.IF "$(OS)"=="MACOSX"
2518    @echo unx
2519    @-$(RM) $(MISC)/$(@:b).list
2520    @-$(RM) $(MISC)/$(TARGET).$(@:b)_10.cmd
2521    @-$(RM) $(MISC)/$(@:b).strip
2522    @echo $(STDSLO) $(APP10OBJS:s/.obj/.o/) \
2523    `cat /dev/null $(APP10LIBS) | sed s\#$(ROUT)\#$(OUT)\#g` | tr -s " " "\n" > $(MISC)/$(@:b).list
2524    @echo -n $(APP10LINKER) $(APP10LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) -o $@ \
2525    $(APP10LINKTYPEFLAG) $(APP10STDLIBS) $(APP10STDLIB) $(STDLIB10) -filelist $(MISC)/$(@:b).list > $(MISC)/$(TARGET).$(@:b)_10.cmd
2526    @$(PERL) $(SOLARENV)/bin/macosx-dylib-link-list.pl \
2527        `cat $(MISC)/$(TARGET).$(@:b)_10.cmd` \
2528        >> $(MISC)/$(TARGET).$(@:b)_10.cmd
2529  .IF "$(VERBOSE)" == "TRUE"
2530    @cat $(MISC)/$(TARGET).$(@:b)_10.cmd
2531  .ENDIF
2532    @+source $(MISC)/$(TARGET).$(@:b)_10.cmd
2533# Need to strip __objcInit symbol to avoid duplicate symbols when loading
2534# libraries at runtime
2535    @-$(CC_PATH)nm $@ | grep -v ' U ' | $(AWK) '{ print $$NF }' | grep -F -x '__objcInit' > $(MISC)/$(@:b).strip
2536    @$(CC_PATH)strip -i -R $(MISC)/$(@:b).strip -X $@
2537    @ls -l $@
2538    @$(PERL) $(SOLARENV)/bin/macosx-change-install-names.pl \
2539        app $(APP10RPATH) $@
2540.IF "$(TARGETTYPE)"=="GUI"
2541    @echo "Making:   " $(@:f).app
2542    @macosx-create-bundle $@
2543.ENDIF      # "$(TARGETTYPE)"=="GUI"
2544.ELSE       # "$(OS)"=="MACOSX"
2545    @echo unx
2546    @-$(RM) $(MISC)/$(TARGET).$(@:b)_10.cmd
2547    @echo $(APP10LINKER) $(APP10LINKFLAGS) $(LINKFLAGSAPP) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
2548    $(APP10OBJS:s/.obj/.o/) '\' >  $(MISC)/$(TARGET).$(@:b)_10.cmd
2549    @cat $(mktmp /dev/null $(APP10LIBS)) | xargs -n 1 cat | sed s\#$(ROUT)\#$(OUT)\#g | sed 's#$$# \\#'  >> $(MISC)/$(TARGET).$(@:b)_10.cmd
2550    @echo $(APP10LINKTYPEFLAG) $(APP10LIBSALCPPRT) $(APP10STDLIBS) $(APP10STDLIB) $(STDLIB10) -o $@ >> $(MISC)/$(TARGET).$(@:b)_10.cmd
2551  .IF "$(VERBOSE)" == "TRUE"
2552    @cat $(MISC)/$(TARGET).$(@:b)_10.cmd
2553  .ENDIF
2554    @+source $(MISC)/$(TARGET).$(@:b)_10.cmd
2555  .IF "$(VERBOSE)" == "TRUE"
2556    @ls -l $@
2557  .ENDIF
2558.ENDIF      # "$(OS)"=="MACOSX"
2559.ENDIF
2560.IF "$(GUI)" == "WNT"
2561    @@-$(MKDIR) $(@:d:d)
2562.IF "$(APP10LINKRES)" != ""
2563    @@-$(RM) $(MISC)/$(APP10LINKRES:b).rc
2564.IF "$(APP10ICON)" != ""
2565    @-echo 1 ICON $(EMQ)"$(APP10ICON:s/\/\\/)$(EMQ)" >> $(MISC)/$(APP10LINKRES:b).rc
2566.ENDIF      # "$(APP10ICON)" != ""
2567.IF "$(APP10VERINFO)" != ""
2568    @-echo $(EMQ)#define VERVARIANT $(BUILD) >> $(MISC)/$(APP10LINKRES:b).rc
2569    @-echo $(EMQ)#include  $(EMQ)"$(APP10VERINFO)$(EMQ)" >> $(MISC)/$(APP10LINKRES:b).rc
2570.ENDIF      # "$(APP10VERINFO)" != ""
2571    $(COMMAND_ECHO)$(RC) -DWIN32 $(APP10PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP10LINKRES:b).rc
2572.ENDIF          # "$(APP10LINKRES)" != ""
2573.IF "$(COM)" == "GCC"
2574    @echo mingw
2575.IF "$(APP10LINKRES)" != "" || "$(APP10RES)" != ""
2576    @cat $(APP10LINKRES) $(subst,/res/,/res{$(subst,$(BIN), $(@:d))} $(APP10RES)) >  $(MISC)/$(@:b)_all.res
2577    windres $(MISC)/$(@:b)_all.res $(APP10RESO)
2578.ENDIF
2579    @echo $(LINK) $(LINKFLAGS) $(LINKFLAGSAPP) $(MINGWSSTDOBJ) -L$(PRJ)/$(INPATH)/lib $(SOLARLIB) $(STDSLO) \
2580        $(APP10BASEX) $(APP10STACKN) -o $@ $(APP10OBJS) \
2581        -Wl,-Map,$(MISC)/$(@:b).map $(STDOBJ) $(APP10RESO) \
2582        `$(TYPE) /dev/null $(APP10LIBS) | sed s#$(ROUT)#$(OUT)#g` \
2583        $(APP_LINKTYPE) $(APP10LIBSALCPPRT) \
2584        -Wl,--start-group $(APP10STDLIBS) -Wl,--end-group $(APP10STDLIB) \
2585        $(STDLIB10) $(MINGWSSTDENDOBJ) > $(MISC)/$(TARGET).$(@:b)_10.cmd
2586  # need this empty line, else dmake somehow gets confused by the .IFs and .ENDIFs
2587  .IF "$(VERBOSE)" == "TRUE"
2588    @$(TYPE)  $(MISC)/$(TARGET).$(@:b)_10.cmd
2589  .ENDIF
2590    @+source $(MISC)/$(TARGET).$(@:b)_10.cmd
2591    @ls -l $@
2592.ELSE   # "$(COM)" == "GCC"
2593.IF "$(linkinc)" == ""
2594    $(COMMAND_ECHO)$(APP10LINKER) @$(mktmp \
2595        $(APP10LINKFLAGS) \
2596        $(LINKFLAGSAPP) $(APP10BASEX) \
2597        $(APP10STACKN) \
2598        -out:$@ \
2599        -map:$(MISC)/{$(subst,/,_ $(APP10TARGET)).map} \
2600        $(STDOBJ) \
2601        $(APP10LINKRES) \
2602        $(APP10RES) \
2603        $(APP10OBJS) \
2604        $(APP10LIBS) \
2605        $(APP10STDLIBS) \
2606        $(APP10STDLIB) $(STDLIB10) \
2607        )
2608    @-echo linking $@.manifest ...
2609.IF "$(VISTA_MANIFEST)"!=""
2610    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -manifest $(TRUSTED_MANIFEST_LOCATION)/trustedinfo.manifest -out:$@.tmanifest$(EMQ) $(FI)
2611    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.tmanifest -outputresource:$@$(EMQ);1 $(FI)
2612.ELSE
2613    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -outputresource:$@$(EMQ);1 $(FI)
2614.ENDIF # "$(VISTA_MANIFEST)"!=""
2615    $(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(RM:s/+//) $@.manifest $(FI)
2616    $(COMMAND_ECHO)$(IFEXIST) $@.tmanifest $(THEN) $(RM:s/+//) $@.tmanifest $(FI)
2617.ELSE
2618        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP10TARGET).lnk
2619        $(COMMAND_ECHO)-$(RM) $(MISC)\$(APP10TARGET).lst
2620        $(COMMAND_ECHO)-$(RM) $(MISC)\linkobj.lst
2621        for %_i in ($(MISC)\*.obj) do type %_i >> $(MISC)\linkobj.lst
2622    type $(mktmp,$(MISC)\$(APP10TARGET).lst
2623        $(APP10LINKFLAGS) \
2624        $(LINKFLAGSAPP) $(APP10BASEX) \
2625        $(APP10STACKN) \
2626        -out:$@ \
2627        $(STDOBJ) \
2628        $(APP10LINKRES) \
2629        $(APP10RES) \
2630        $(APP10OBJS) \
2631        $(APP10LIBS) \
2632        $(APP10STDLIBS) \
2633        $(APP10STDLIB) $(STDLIB10))
2634        $(COMMAND_ECHO)$(SED)$(SED) -e 's/\(\.\.\\\)\{2,4\}/..\\/g' $(MISC)\$(APP10TARGETN:b)_linkobj.lst >> $(MISC)\$(APP10TARGET).lst
2635        $(COMMAND_ECHO)$(SED)$(IFEXIST) $(MISC)/$(APP10TARGET).lst $(THEN) type $(MISC)/$(APP10TARGET).lst  >> $(MISC)/$(APP10TARGET).lnk $(FI)
2636        $(COMMAND_ECHO)$(SED)$(APP10LINKER) @$(MISC)\$(APP10TARGET).lnk
2637.ENDIF      # "$(linkinc)" == ""
2638.ENDIF      # "$(COM)" == "GCC"
2639.IF "$(APP10TARGET)" == "loader"
2640    $(COMMAND_ECHO)$(PERL) loader.pl $@
2641    $(COMMAND_ECHO)$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
2642    $(COMMAND_ECHO)$(RM) $@
2643    $(COMMAND_ECHO)$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
2644.ENDIF          # "$(TARGET)" == "setup"
2645
2646.ENDIF          # "$(GUI)" == "WNT"
2647
2648.IF "$(GUI)" == "OS2"
2649    @+-$(MKDIR) $(@:d:d) > $(NULLDEV)
2650.IF "$(APP10LINKRES)" != ""
2651    @+-$(RM) $(MISC)/$(APP10LINKRES:b).rc > $(NULLDEV)
2652.IF "$(APP10ICON)" != ""
2653    @-+echo ICON 1 $(EMQ)"$(APP10ICON:s#/#\\\\#)$(EMQ)" >> $(MISC)$/$(APP10LINKRES:b).rc
2654.ENDIF      # "$(APP10ICON)" != ""
2655.IF "$(APP10VERINFO)" != ""
2656    @-+echo $(EMQ)#define VERVARIANT    $(BUILD) >> $(MISC)/$(APP10LINKRES:b).rc
2657    @-+echo $(EMQ)#include  $(EMQ)"$(APP10VERINFO)$(EMQ)" >> $(MISC)/$(APP10LINKRES:b).rc
2658.ENDIF      # "$(APP10VERINFO)" != ""
2659    $(COMMAND_ECHO)$(RC) -r -DOS2 $(APP10PRODUCTDEF) -I$(SOLARRESDIR) $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(APP10LINKRES:b).rc
2660.ENDIF          # "$(APP10LINKRES)" != ""
2661
2662.IF "$(TARGETTYPE)" == "GUI"
2663    @echo NAME $(APP10TARGET) WINDOWAPI > $(MISC)/$(APP10TARGET).def
2664.ENDIF
2665
2666    $(COMMAND_ECHO)$(APP10LINKER) -v \
2667        $(APP10LINKFLAGS) \
2668        $(LINKFLAGSAPP) $(APP10BASEX) \
2669        $(APP10STACKN) \
2670        -o $@ \
2671        -Zmap -L$(LB) \
2672        -L$(SOLARVERSION)/$(INPATH)/lib \
2673        $(STDOBJ) \
2674        $(APP10LINKRES) \
2675        $(APP10RES) \
2676        $(APP10DEF) \
2677        $(APP10OBJS) \
2678        $(APP10LIBS) \
2679        $(APP10STDLIBS) \
2680        $(APP10STDLIB) $(STDLIB10)
2681
2682
2683.IF "$(APP10TARGET)" == "loader"
2684    $(COMMAND_ECHO)+$(PERL) loader.pl $@
2685    $(COMMAND_ECHO)+$(TYPE) $(@) $(@:d)unloader.exe > $(@:d)_new.exe
2686    $(COMMAND_ECHO)+$(RM) $@
2687    $(COMMAND_ECHO)+$(RENAME) $(@:d)_new.exe $(@:d)loader.exe
2688.ENDIF          # "$(TARGET)" == "setup"
2689
2690.ENDIF          # "$(GUI)" == "OS2"
2691
2692.ENDIF          # "$(APP10TARGETN)"!=""
2693
2694# New rule for automatic run targets of unit test targets
2695.IF "$(APP10TEST)" == "enabled" &&  "$(APP10TARGET)" != ""
2696
2697$(APP10TARGET)_run: $(APP10TARGETN)
2698    $(COMMAND_ECHO) $(AUGMENT_LIBRARY_PATH_LOCAL) $(APP10TARGETN) --gtest_output="xml:$(BIN)/$(APP10TARGET)_result.xml"
2699
2700.ENDIF
2701
2702
2703# Instruction for linking
2704