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