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