blob: 504569e5963ecf915c57084c2583d8fa6b3c7b0e [file] [log] [blame]
#**************************************************************
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
#**************************************************************
#######################################################
# targets for linking
# unroll begin
.IF "$(SHL$(TNR)TARGETN)"!=""
.IF "$(OS)"=="AIX"
SHL$(TNR)STDLIBS=
.ENDIF
.IF "$(SHLLINKARCONLY)" != ""
SHL$(TNR)STDLIBS=
STDSHL=
.ELSE
SHL$(TNR)ARCHIVES=
.ENDIF
# decide how to link
.IF "$(SHL$(TNR)CODETYPE)"=="C"
SHL$(TNR)LINKER=$(LINKC)
SHL$(TNR)STDSHL=$(subst,CPPRUNTIME, $(STDSHL))
SHL$(TNR)LINKFLAGS+=$(LINKCFLAGS)
.ELSE # "$(SHL$(TNR)CODETYPE)"=="C"
SHL$(TNR)LINKER=$(LINK)
SHL$(TNR)STDSHL=$(subst,CPPRUNTIME,$(STDLIBCPP) $(STDSHL))
SHL$(TNR)LINKFLAGS+=$(LINKFLAGS)
.ENDIF # "$(SHL$(TNR)CODETYPE)"=="C"
SHL$(TNR)RPATH*=OOO
LINKFLAGSRUNPATH_$(SHL$(TNR)RPATH)*=/ERROR:/Bad_SHL$(TNR)RPATH_value
SHL$(TNR)LINKFLAGS+=$(LINKFLAGSRUNPATH_$(SHL$(TNR)RPATH))
.IF "$(SHL$(TNR)USE_EXPORTS)"=="" || "$(GUI)"=="OS2"
SHL$(TNR)DEF*=$(MISC)/$(SHL$(TNR)TARGET).def
.ENDIF # "$(SHL$(TNR)USE_EXPORTS)"==""
EXTRALIBPATHS$(TNR)=$(EXTRALIBPATHS)
.IF "$(UPDATER)"=="YES"
.IF "$(SHL$(TNR)NOCHECK)"==""
.IF "$(SOLAR_STLLIBPATH)"!=""
EXTRALIBPATHS$(TNR)+=-L$(SOLAR_STLLIBPATH)
.ENDIF
.ENDIF # "$(SHL$(TNR)NOCHECK)"!=""
.ENDIF
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++ version object ++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.IF "$(L10N_framework)"==""
.IF "$(VERSIONOBJ)"!=""
SHL$(TNR)VERSIONOBJ:=$(VERSIONOBJ:d){$(subst,$(DLLPOSTFIX),_dflt $(SHL$(TNR)TARGET))}$(VERSIONOBJ:f)
USE_VERSIONH:=$(INCCOM)/$(SHL$(TNR)VERSIONOBJ:b).h
.IF "$(GUI)" == "UNX"
SHL$(TNR)VERSIONOBJDEP:=$(VERSIONOBJ:d){$(subst,$(DLLPOSTFIX),_dflt $(SHL$(TNR)TARGET))}$(VERSIONOBJ:f:s/.o/.obj/)
.ELSE # "$(GUI)" == "UNX"
SHL$(TNR)VERSIONOBJDEP:=$(VERSIONOBJ:d){$(subst,$(DLLPOSTFIX),_dflt $(SHL$(TNR)TARGET))}$(VERSIONOBJ:f)
.ENDIF # "$(GUI)" == "UNX"
$(MISC)/$(SHL$(TNR)VERSIONOBJ:b).c : $(SOLARENV)/src/version.c $(INCCOM)/$(SHL$(TNR)VERSIONOBJ:b).h
# $(COPY) $(SOLARENV)/src/version.c $@
$(COMMAND_ECHO)$(TYPE) $(SOLARENV)/src/version.c | $(SED) s/_version.h/$(SHL$(TNR)VERSIONOBJ:b).h/ > $@
.INIT : $(SHL$(TNR)VERSIONOBJDEP)
.ENDIF # "$(VERSIONOBJ)"!=""
.ENDIF
.IF "$(GUI)" != "UNX"
.IF "$(GUI)" == "WNT" || "$(GUI)" == "OS2"
.IF "$(SHL$(TNR)IMPLIB)" == ""
SHL$(TNR)IMPLIB=i$(TARGET)_t$(TNR)
.ENDIF # "$(SHL$(TNR)IMPLIB)" == ""
.IF "$(COM)" != "GCC"
USE_$(TNR)IMPLIB=-implib:$(LB)/$(SHL$(TNR)IMPLIB).lib
.ENDIF # "$(COM)" != "GCC"
SHL$(TNR)IMPLIBN=$(LB)/$(SHL$(TNR)IMPLIB).lib
ALLTAR : $(SHL$(TNR)IMPLIBN)
.IF "$(USE_DEFFILE)"==""
USE_$(TNR)IMPLIB_DEPS=$(LB)/$(SHL$(TNR)IMPLIB).lib
.ENDIF # "$(USE_DEFFILE)"==""
.ENDIF # "$(GUI)" == "WNT" || "$(GUI)" == "OS2"
USE_SHL$(TNR)DEF=$(SHL$(TNR)DEF)
.ELSE # "$(GUI)" != "UNX"
USE_SHL$(TNR)DEF=
SHL$(TNR)DEPN+:=$(SHL$(TNR)DEPNU)
.IF "$(SHL$(TNR)VERSIONMAP)"==""
# to activate vmaps remove "#"
USE_SHL$(TNR)VERSIONMAP=$(MISC)/$(SHL$(TNR)TARGET).vmap
.ENDIF # "$(SHL$(TNR)VERSIONMAP)"==""
.IF "$(USE_SHL$(TNR)VERSIONMAP)"!=""
.IF "$(SHL$(TNR)FILTERFILE)"!=""
.IF "$(SHL$(TNR)VERSIONMAP)"!=""
#eine von beiden ist zuviel
USE_SHL$(TNR)VERSIONMAP=$(MISC)/$(SHL$(TNR)TARGET).vmap
$(USE_SHL$(TNR)VERSIONMAP) .PHONY:
@echo -----------------------------
@echo you should only use versionmap OR exportfile
@echo -----------------------------
# force_dmake_to_error
.ENDIF # "$(SHL$(TNR)VERSIONMAP)"!=""
SHL$(TNR)VERSIONMAPPARA=$(LINKVERSIONMAPFLAG) $(USE_SHL$(TNR)VERSIONMAP)
$(USE_SHL$(TNR)VERSIONMAP): \
$(SHL$(TNR)OBJS)\
$(SHL$(TNR)LIBS)\
$(SHL$(TNR)FILTERFILE)
@$(RM) $@.dump
.IF "$(SHL$(TNR)OBJS)"!=""
# dump remaining objects on the fly
.IF "$(OS)"=="MACOSX"
@-nm $(SHL$(TNR)OBJS:s/.obj/.o/) > $@.dump
.ELSE
@nm $(SHL$(TNR)OBJS:s/.obj/.o/) > $@.dump
.ENDIF
.ENDIF # "$(SHL$(TNR)OBJS)!"=""
@$(TYPE) /dev/null $(SHL$(TNR)LIBS:s/.lib/.dump/) >> $@.dump
$(COMMAND_ECHO) $(PERL) $(SOLARENV)/bin/mapgen.pl -d $@.dump -s $(SHL$(TNR)INTERFACE) -f $(SHL$(TNR)FILTERFILE) -m $@
.ELSE # "$(SHL$(TNR)FILTERFILE)"!=""
USE_SHL$(TNR)VERSIONMAP=$(MISC)/$(SHL$(TNR)TARGET).vmap
$(USE_SHL$(TNR)VERSIONMAP) :
.IF "$(VERBOSE)" == "TRUE"
@echo -----------------------------
@echo SHL$(TNR)FILTERFILE not set!
@echo -----------------------------
@$(TOUCH) $@
@echo dummy file to keep the dependencies for later use.
.ELSE
@$(TOUCH) $@
.ENDIF
# force_dmake_to_error
.ENDIF # "$(SHL$(TNR)FILTERFILE)"!=""
.ELSE # "$(USE_SHL$(TNR)VERSIONMAP)"!=""
#and now for the plain non-generic way...
.IF "$(SHL$(TNR)VERSIONMAP)"!=""
USE_SHL$(TNR)VERSIONMAP=$(MISC)/$(SHL$(TNR)VERSIONMAP:b)_$(SHL$(TNR)TARGET)$(SHL$(TNR)VERSIONMAP:e)
SHL$(TNR)VERSIONMAPPARA=$(LINKVERSIONMAPFLAG) $(USE_SHL$(TNR)VERSIONMAP)
.IF "$(OS)"=="MACOSX"
$(USE_SHL$(TNR)VERSIONMAP): $(SHL$(TNR)OBJS) $(SHL$(TNR)LIBS)
.ENDIF
# .ERRREMOVE is needed as a recipe line like "$(AWK) ... > $@" would create $@
# even if the $(AWK) part fails:
$(USE_SHL$(TNR)VERSIONMAP) .ERRREMOVE: $(SHL$(TNR)VERSIONMAP)
@@-$(RM) -f $@
# The following files will only be generated and needed on Mac OS X as temporary files
# in order to generate exported symbols list out of Linux/Solaris map files
.IF "$(OS)"=="MACOSX"
@-$(RM) -f $@.symregexp >& $(NULLDEV)
@-$(RM) -f $@.expsymlist >& $(NULLDEV)
.ENDIF
# Its questionable if the following condition '.IF "$(COMID)"=="gcc3"' makes sense and what
# happens if somebody will change it in the future
.IF "$(COMID)"=="gcc3"
$(COMMAND_ECHO) tr -d "\015" < $(SHL$(TNR)VERSIONMAP) | $(AWK) -f $(SOLARENV)/bin/addsym.awk > $@
.ELIF "$(COMNAME)"=="sunpro5"
$(COMMAND_ECHO) tr -d "\015" < $(SHL$(TNR)VERSIONMAP) | $(GREP) -v $(IGNORE_SYMBOLS) > $@
.ELSE # "$(COMID)"=="gcc3"
$(COMMAND_ECHO) tr -d "\015" < $(SHL$(TNR)VERSIONMAP) > $@
.ENDIF # "$(COMID)"=="gcc3"
@chmod a+w $@
# Mac OS X post-processing generate an exported symbols list from the generated map file
# for details on exported symbols list see man ld on Mac OS X
.IF "$(OS)"=="MACOSX"
@-cat $@ | $(AWK) -f $(SOLARENV)/bin/unxmap-to-macosx-explist.awk | grep -v "\*\|?" > $@.exported-symbols
@-cat $@ | $(AWK) -f $(SOLARENV)/bin/unxmap-to-macosx-explist.awk | grep "\*\|?" > $@.symbols-regexp
# Shared libraries will be build out of the *.obj files specified in SHL?OBJS and SHL?LIBS
# Extract RTTI symbols from all the objects that will be used to build a shared library
.IF "$(SHL$(TNR)OBJS)"!=""
-echo $(foreach,i,$(SHL$(TNR)OBJS:s/.obj/.o/) $i) | xargs -n1 nm -gx | $(SOLARENV)/bin/addsym-macosx.sh $@.symbols-regexp $@.symbols-regexp.tmp >> $@.exported-symbols
.ENDIF
.IF "$(SHL$(TNR)LIBS)"!=""
$(COMMAND_ECHO)-$(TYPE) $(foreach,j,$(SHL$(TNR)LIBS) $j) | $(SED) s\#$(ROUT)\#$(PRJ)/$(ROUT)\#g | xargs -n1 nm -gx | $(SOLARENV)/bin/addsym-macosx.sh $@.symbols-regexp $@.symbols-regexp.tmp >> $@.exported-symbols
.ENDIF
# overwrite the map file generate into the local output tree with the generated
# exported symbols list
cp $@.exported-symbols $@
.ENDIF # .IF "$(OS)"=="MACOSX"
.ENDIF # "$(SHL$(TNR)VERSIONMAP)"!=""
.ENDIF # "$(USE_SHL$(TNR)VERSIONMAP)"!=""
.ENDIF # "$(GUI)" != "UNX"
.IF "$(UNIXVERSIONNAMES)"!=""
.IF "$(OS)"!="MACOSX"
.IF "$(GUI)"=="UNX"
SHL$(TNR)SONAME=\"$(SONAME_SWITCH)$(SHL$(TNR)TARGETN:f)\"
.ENDIF # "$(GUI)"!="UNX"
.ENDIF # "$(OS)"!="MACOSX"
.ENDIF # "$(UNIXVERSIONNAMES)"!=""
.IF "$(SHL$(TNR)RES)"!=""
SHL$(TNR)ALLRES+=$(SHL$(TNR)RES)
SHL$(TNR)LINKRES*=$(MISC)/$(SHL$(TNR)TARGET).res
SHL$(TNR)LINKRESO*=$(MISC)/$(SHL$(TNR)TARGET)_res.o
.ENDIF # "$(SHL$(TNR)RES)"!=""
.IF "$(SHL$(TNR)DEFAULTRES)$(use_shl_versions)"!=""
SHL$(TNR)DEFAULTRES*=$(MISC)/$(SHL$(TNR)TARGET)_def.res
SHL$(TNR)ALLRES+=$(SHL$(TNR)DEFAULTRES)
SHL$(TNR)LINKRES*=$(MISC)/$(SHL$(TNR)TARGET).res
SHL$(TNR)LINKRESO*=$(MISC)/$(SHL$(TNR)TARGET)_res.o
.ENDIF # "$(SHL$(TNR)DEFAULTRES)$(use_shl_versions)"!=""
#.IF "$(SHL$(TNR)TARGETN)"!=""
.IF "$(linkinc)"!=""
.IF "$(GUI)"=="WNT" || "$(GUI)" == "OS2"
.IF "$(SHL$(TNR)LIBS)"!=""
$(MISC)/$(SHL$(TNR)TARGET)_linkinc.ls .PHONY:
@@-$(RM) $@
$(COMMAND_ECHO)$(SED) -f $(SOLARENV)/bin/chrel.sed $(foreach,i,$(SHL$(TNR)LIBS) $(i:s/.lib/.lin/)) >> $@
.ENDIF # "$(SHL$(TNR)LIBS)"!=""
.ENDIF
LINKINCTARGETS+=$(MISC)/$(SHL$(TNR)TARGETN:b)_linkinc.ls
$(SHL$(TNR)TARGETN) : $(LINKINCTARGETS)
.ELSE
.IF "$(SHL$(TNR)USE_EXPORTS)"=="name"
.IF "$(GUI)"=="WNT" || "$(GUI)" == "OS2"
.IF "$(COM)"!="GCC"
.IF "$(SHL$(TNR)LIBS)"!=""
SHL$(TNR)LINKLIST=$(MISC)/$(SHL$(TNR)TARGET)_link.lst
SHL$(TNR)LINKLISTPARAM=@$(SHL$(TNR)LINKLIST)
$(SHL$(TNR)LINKLIST) : $(SHL$(TNR)LIBS)
@@-$(RM) $@
$(COMMAND_ECHO)$(SED) -f $(SOLARENV)/bin/chrel.sed $(foreach,i,$(SHL$(TNR)LIBS) $(i:s/.lib/.lin/)) >> $@
.ENDIF # "$(SHL$(TNR)LIBS)"!=""
.ENDIF # "$(COM)"!="GCC"
.ENDIF
.ENDIF # "$(SHL$(TNR)USE_EXPORTS)"=="name"
$(MISC)/%linkinc.ls:
@echo . > $@
.ENDIF # "$(linkinc)"!=""
.IF "$(GUI)" == "OS2"
#21/02/2006 YD dll names must be 8.3, invoke fix script
#check osl/os2/module.c/osl_loadModule()
SHL$(TNR)TARGET8=$(shell @fix_shl.cmd $(SHL$(TNR)TARGET))
.ENDIF
$(SHL$(TNR)TARGETN) : \
$(SHL$(TNR)OBJS)\
$(SHL$(TNR)LIBS)\
$(USE_$(TNR)IMPLIB_DEPS)\
$(USE_SHL$(TNR)DEF)\
$(USE_SHL$(TNR)VERSIONMAP)\
$(SHL$(TNR)RES)\
$(SHL$(TNR)DEPN) \
$(SHL$(TNR)LINKLIST)
@echo "Making: " $(@:f)
.IF "$(GUI)" == "WNT"
.IF "$(SHL$(TNR)DEFAULTRES)"!=""
@@-$(RM) $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
.IF "$(SHL$(TNR)ICON)" != ""
@echo 1 ICON $(SHL$(TNR)ICON) >> $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
.ENDIF
.IF "$(use_shl_versions)" != ""
.IF "$(SHL$(TNR)ADD_VERINFO)"!=""
@echo $(EMQ)#include $(EMQ)"$(SHL$(TNR)ADD_VERINFO)$(EMQ)" >> $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
.ELSE # "$(SHL$(TNR)ADD_VERINFO)"!=""
@echo $(EMQ)#define ADDITIONAL_VERINFO1 >> $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
@echo $(EMQ)#define ADDITIONAL_VERINFO2 >> $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
@echo $(EMQ)#define ADDITIONAL_VERINFO3 >> $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
.ENDIF # "$(SHL$(TNR)ADD_VERINFO)"!=""
@echo $(EMQ)#define VERVARIANT $(BUILD) >> $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
@echo $(EMQ)#define ORG_NAME $(SHL$(TNR)TARGET)$(DLLPOST) >> $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
@echo $(EMQ)#define INTERNAL_NAME $(SHL$(TNR)TARGET:b) >> $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
@echo $(EMQ)#include $(EMQ)"shlinfo.rc$(EMQ)" >> $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
.ENDIF # "$(use_shl_versions)" != ""
$(COMMAND_ECHO)$(RC) -DWIN32 $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
.ENDIF # "$(SHL$(TNR)DEFAULTRES)"!=""
.IF "$(SHL$(TNR)ALLRES)"!=""
$(COMMAND_ECHO)$(TYPE) $(SHL$(TNR)ALLRES) > $(SHL$(TNR)LINKRES)
.IF "$(COM)"=="GCC"
windres $(SHL$(TNR)LINKRES) $(SHL$(TNR)LINKRESO)
.ENDIF # "$(COM)"=="GCC"
.ENDIF # "$(SHL$(TNR)ALLRES)"!=""
.IF "$(COM)"=="GCC" # always have to call dlltool explicitly as ld cannot handle # comment in .def
@echo dlltool --dllname $(SHL$(TNR)TARGET)$(DLLPOST) \
--kill-at \\ > $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
@noop $(assign ALL$(TNR)OBJLIST:=$(STDOBJ) $(SHL$(TNR)OBJS) $(SHL$(TNR)LINKRESO) $(shell $(TYPE) /dev/null $(SHL$(TNR)LIBS) | $(SED) s?$(ROUT)?$(PRJ)/$(ROUT)?g))
.IF "$(DEFLIB$(TNR)NAME)"!="" # do not have to include objs
@noop $(assign DEF$(TNR)OBJLIST:=$(shell $(TYPE) $(foreach,i,$(DEFLIB$(TNR)NAME) $(SLB)/$(i).lib) | sed s?$(ROUT)?$(PRJ)/$(ROUT)?g))
@noop $(foreach,i,$(DEF$(TNR)OBJLIST) $(assign ALL$(TNR)OBJLIST:=$(ALL$(TNR)OBJLIST:s?$i??)))
.ENDIF # "$(DEFLIB$(TNR)NAME)"!=""
@echo --output-exp $(MISC)/$(@:b)_exp.o \\ >> $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
.IF "$(SHL$(TNR)DEF)"!=""
@echo --input-def $(SHL$(TNR)DEF) \\ >> $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
.ELSE
@echo $(SHL$(TNR)VERSIONOBJ) $(SHL$(TNR)DESCRIPTIONOBJ) \\ >> $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
.ENDIF
@echo $(ALL$(TNR)OBJLIST) >> $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
@echo $(LINK) $(LINKFLAGS) $(LINKFLAGSSHL) $(MINGWSSTDOBJ) -o $@ \
$(STDOBJ) $(SHL$(TNR)VERSIONOBJ) $(SHL$(TNR)DESCRIPTIONOBJ) $(SHL$(TNR)OBJS) $(SHL$(TNR)LINKRESO) \
`$(TYPE) /dev/null $(SHL$(TNR)LIBS) | $(SED) s\#$(ROUT)\#$(PRJ)/$(ROUT)\#g` \
-Wl,--exclude-libs,ALL,--start-group $(SHL$(TNR)STDLIBS) -Wl,--end-group \
$(SHL$(TNR)STDSHL) $(STDSHL$(TNR)) $(MISC)/$(@:b)_exp.o $(MINGWSSTDENDOBJ) \
-Wl,-Map,$(MISC)/$(@:b).map >> $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
.IF "$(VERBOSE)" == "TRUE"
@$(TYPE) $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
.ENDIF
@+source $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
.ELSE
.IF "$(linkinc)"==""
.IF "$(SHL$(TNR)USE_EXPORTS)"!="name"
.IF "$(USE_DEFFILE)"!=""
$(COMMAND_ECHO)$(SHL$(TNR)LINKER) @$(mktmp \
$(SHL$(TNR)LINKFLAGS) \
$(LINKFLAGSSHL) \
$(SHL$(TNR)STACK) $(SHL$(TNR)BASEX) \
-out:$@ \
-map:$(MISC)/$(@:b).map \
-def:$(SHL$(TNR)DEF) \
$(USE_$(TNR)IMPLIB) \
$(STDOBJ) \
$(SHL$(TNR)VERSIONOBJ) $(SHL$(TNR)OBJS) \
$(SHL$(TNR)LIBS) \
$(SHL$(TNR)STDLIBS) \
$(SHL$(TNR)STDSHL) $(STDSHL$(TNR)) \
$(SHL$(TNR)LINKRES) \
)
# double check if target was really written... still making sense?
@@$(LS) $@
@echo linking $@.manifest ...
.IF "$(VISTA_MANIFEST)"!=""
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -manifest $(TRUSTED_MANIFEST_LOCATION)/trustedinfo.manifest -out:$@.tmanifest$(EMQ) $(FI)
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.tmanifest -outputresource:$@$(EMQ);2 $(FI)
.ELSE
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -outputresource:$@$(EMQ);2 $(FI)
.ENDIF # "$(VISTA_MANIFEST)"!=""
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(RM:s/+//) $@.manifest $(FI)
$(COMMAND_ECHO)$(IFEXIST) $@.tmanifest $(THEN) $(RM:s/+//) $@.tmanifest $(FI)
.ELSE # "$(USE_DEFFILE)"!=""
$(COMMAND_ECHO)$(SHL$(TNR)LINKER) @$(mktmp $(SHL$(TNR)LINKFLAGS) \
$(LINKFLAGSSHL) $(SHL$(TNR)BASEX) \
$(SHL$(TNR)STACK) -out:$(SHL$(TNR)TARGETN) \
-map:$(MISC)/$(@:B).map \
$(LB)/$(SHL$(TNR)IMPLIB).exp \
$(STDOBJ) \
$(SHL$(TNR)OBJS) $(SHL$(TNR)VERSIONOBJ) \
$(SHL$(TNR)LIBS) \
$(SHL$(TNR)STDLIBS) \
$(SHL$(TNR)STDSHL) $(STDSHL$(TNR)) \
$(SHL$(TNR)LINKRES) \
)
# double check if target was really written... still making sense?
@@$(LS) $@
@echo linking $@.manifest ...
.IF "$(VISTA_MANIFEST)"!=""
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -manifest $(TRUSTED_MANIFEST_LOCATION)/trustedinfo.manifest -out:$@.tmanifest$(EMQ) $(FI)
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.tmanifest -outputresource:$@$(EMQ);2 $(FI)
.ELSE
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -outputresource:$@$(EMQ);2 $(FI)
.ENDIF # "$(VISTA_MANIFEST)"!=""
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(RM:s/+//) $@.manifest $(FI)
$(COMMAND_ECHO)$(IFEXIST) $@.tmanifest $(THEN) $(RM:s/+//) $@.tmanifest $(FI)
.ENDIF # "$(USE_DEFFILE)"!=""
.ELSE # "$(SHL$(TNR)USE_EXPORTS)"!="name"
$(COMMAND_ECHO)$(SHL$(TNR)LINKER) @$(mktmp $(SHL$(TNR)LINKFLAGS) \
$(LINKFLAGSSHL) $(SHL$(TNR)BASEX) \
$(SHL$(TNR)STACK) -out:$(SHL$(TNR)TARGETN) \
-map:$(MISC)/$(@:B).map \
$(USE_$(TNR)IMPLIB) \
$(STDOBJ) \
$(SHL$(TNR)OBJS) $(SHL$(TNR)VERSIONOBJ)) \
$(SHL$(TNR)LINKLISTPARAM) \
@$(mktmp $(SHL$(TNR)STDLIBS) \
$(SHL$(TNR)STDSHL) $(STDSHL$(TNR)) \
$(SHL$(TNR)LINKRES) \
)
@echo linking $@.manifest ...
.IF "$(VISTA_MANIFEST)"!=""
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -manifest $(TRUSTED_MANIFEST_LOCATION)/trustedinfo.manifest -out:$@.tmanifest$(EMQ) $(FI)
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.tmanifest -outputresource:$@$(EMQ);2 $(FI)
.ELSE
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -outputresource:$@$(EMQ);2 $(FI)
.ENDIF # "$(VISTA_MANIFEST)"!=""
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(RM:s/+//) $@.manifest $(FI)
$(COMMAND_ECHO)$(IFEXIST) $@.tmanifest $(THEN) $(RM:s/+//) $@.tmanifest $(FI)
.ENDIF # "$(SHL$(TNR)USE_EXPORTS)"!="name"
.ELSE # "$(linkinc)"==""
$(COMMAND_ECHO)-$(RM) del $(MISC)/$(SHL$(TNR)TARGET).lnk
$(COMMAND_ECHO)-$(RM) $(MISC)/$(SHL$(TNR)TARGET).lst
$(COMMAND_ECHO)$(TYPE) $(mktmp \
$(SHL$(TNR)LINKFLAGS) \
$(LINKFLAGSSHL) $(SHL$(TNR)BASEX) \
$(SHL$(TNR)STACK) $(MAPFILE) \
-out:$@ \
$(LB)/$(SHL$(TNR)IMPLIB).exp \
$(STDOBJ) \
$(SHL$(TNR)OBJS) \
$(SHL$(TNR)STDLIBS) \
$(SHL$(TNR)STDSHL) $(STDSHL$(TNR)) \
$(SHL$(TNR)LINKRES) \
) >> $(MISC)/$(SHL$(TNR)TARGET).lnk
$(COMMAND_ECHO)$(TYPE) $(MISC)/$(SHL$(TNR)TARGETN:b)_linkinc.ls >> $(MISC)/$(SHL$(TNR)TARGET).lnk
$(COMMAND_ECHO)$(SHL$(TNR)LINKER) @$(MISC)/$(SHL$(TNR)TARGET).lnk
@echo linking $@.manifest ...
.IF "$(VISTA_MANIFEST)"!=""
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -manifest $(TRUSTED_MANIFEST_LOCATION)/trustedinfo.manifest -out:$@.tmanifest$(EMQ) $(FI)
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.tmanifest -outputresource:$@$(EMQ);2 $(FI)
.ELSE
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(MT) $(MTFLAGS) -manifest $@.manifest -outputresource:$@$(EMQ);2 $(FI)
.ENDIF # "$(VISTA_MANIFEST)"!=""
$(COMMAND_ECHO)$(IFEXIST) $@.manifest $(THEN) $(RM:s/+//) $@.manifest $(FI)
$(COMMAND_ECHO)$(IFEXIST) $@.tmanifest $(THEN) $(RM:s/+//) $@.tmanifest $(FI)
.ENDIF # "$(linkinc)"==""
.ENDIF # "$(COM)"=="GCC"
.ENDIF # "$(GUI)" == "WNT"
.IF "$(GUI)"=="UNX"
.IF "$(OS)"=="MACOSX"
@-$(RM) $(MISC)/$(@:b).list
@-$(RM) $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
@echo $(STDSLO) $(SHL$(TNR)OBJS:s/.obj/.o/) \
$(SHL$(TNR)VERSIONOBJ) \
`cat /dev/null $(SHL$(TNR)LIBS) | sed s\#$(ROUT)\#$(PRJ)/$(ROUT)\#g` | tr -s " " "\n" > $(MISC)/$(@:b).list
@echo -n $(SHL$(TNR)LINKER) $(SHL$(TNR)LINKFLAGS) $(SHL$(TNR)VERSIONMAPPARA) $(LINKFLAGSSHL) -L$(PRJ)/$(ROUT)/lib $(SOLARLIB) -o $@ \
$(SHL$(TNR)STDLIBS) $(SHL$(TNR)ARCHIVES) $(SHL$(TNR)STDSHL) $(STDSHL$(TNR)) -filelist $(MISC)/$(@:b).list $(LINKOUTPUT_FILTER) > $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
@$(PERL) $(SOLARENV)/bin/macosx-dylib-link-list.pl \
`cat $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd` \
>> $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
.IF "$(VERBOSE)" == "TRUE"
@cat $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
.ENDIF
@+source $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
@$(PERL) $(SOLARENV)/bin/macosx-change-install-names.pl \
shl $(SHL$(TNR)RPATH) $@
.IF "$(SHL$(TNR)CREATEJNILIB)"!=""
@echo "Making: " $(@:f).jnilib
@macosx-create-bundle $@
.ENDIF # "$(SHL$(TNR)CREATEJNILIB)"!=""
.IF "$(UPDATER)"=="YES"
.IF "$(SHL$(TNR)NOCHECK)"==""
$(SOLARENV)/bin/checkdll.sh -L$(LB) -L$(SOLARLIBDIR) $(EXTRALIBPATHS$(TNR)) $(SHL$(TNR)TARGETN)
.ENDIF # "$(SHL$(TNR)NOCHECK)"!=""
.ENDIF
.ELSE # "$(OS)"=="MACOSX"
@-$(RM) $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
@echo $(SHL$(TNR)LINKER) $(SHL$(TNR)LINKFLAGS) $(SHL$(TNR)SONAME) $(LINKFLAGSSHL) $(SHL$(TNR)VERSIONMAPPARA) -L$(PRJ)/$(ROUT)/lib $(SOLARLIB) $(STDSLO) $(SHL$(TNR)OBJS:s/.obj/.o/) \
$(SHL$(TNR)VERSIONOBJ) -o $@ \
`cat /dev/null $(SHL$(TNR)LIBS) | tr -s " " "\n" | $(SED) s\#$(ROUT)\#$(PRJ)/$(ROUT)\#g` \
$(SHL$(TNR)STDLIBS) $(SHL$(TNR)ARCHIVES) $(SHL$(TNR)STDSHL) $(STDSHL$(TNR)) $(LINKOUTPUT_FILTER) > $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
.IF "$(VERBOSE)" == "TRUE"
@cat $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
.ENDIF
@+source $(MISC)/$(TARGET).$(@:b)_$(TNR).cmd
.IF "$(UPDATER)"=="YES"
.IF "$(SHL$(TNR)NOCHECK)"==""
$(COMMAND_ECHO)-$(RM) $(SHL$(TNR)TARGETN:d)check_$(SHL$(TNR)TARGETN:f)
$(COMMAND_ECHO)$(RENAME) $(SHL$(TNR)TARGETN) $(SHL$(TNR)TARGETN:d)check_$(SHL$(TNR)TARGETN:f)
.IF "$(VERBOSE)"=="TRUE"
$(COMMAND_ECHO)$(SOLARENV)/bin/checkdll.sh -L$(LB) -L$(SOLARLIBDIR) $(EXTRALIBPATHS$(TNR)) $(SHL$(TNR)TARGETN:d)check_$(SHL$(TNR)TARGETN:f)
.ELSE
$(COMMAND_ECHO)$(SOLARENV)/bin/checkdll.sh -L$(LB) -L$(SOLARLIBDIR) $(EXTRALIBPATHS$(TNR)) -- -s $(SHL$(TNR)TARGETN:d)check_$(SHL$(TNR)TARGETN:f)
.ENDIF
.ENDIF # "$(SHL$(TNR)NOCHECK)"!=""
.ENDIF # "$(UPDATER)"=="YES"
.ENDIF # "$(OS)"=="MACOSX"
.IF "$(UNIXVERSIONNAMES)"!=""
$(COMMAND_ECHO)$(RM) $(LB)/$(SHL$(TNR)TARGETN:b)
$(COMMAND_ECHO)cd $(LB) && ln -s $(SHL$(TNR)TARGETN:f) $(SHL$(TNR)TARGETN:b)
.ENDIF # "$(UNIXVERSIONNAMES)"!=""
.IF "$(VERBOSE)" == "TRUE"
@ls -l $@
.ENDIF
.ENDIF # "$(GUI)" == "UNX"
.IF "$(GUI)" == "OS2"
.IF "$(SHL$(TNR)DEFAULTRES)"!=""
@+-$(RM) $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc > $(NULLDEV)
.IF "$(SHL$(TNR)ICON)" != ""
@-+echo 1 ICON $(SHL$(TNR)ICON) >> $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
.ENDIF
.IF "$(use_shl_versions)" != ""
.IF "$(SHL$(TNR)ADD_VERINFO)"!=""
@-+echo $(EMQ)#include $(EMQ)"$(SHL$(TNR)ADD_VERINFO)$(EMQ)" >> $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
.ENDIF # "$(SHL$(TNR)ADD_VERINFO)"!=""
@-+echo MENU 1 BEGIN END >> $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
# @-+echo $(EMQ)RCDATA 1 { "Build string here" }$(EMQ) >> $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
.ENDIF # "$(use_shl_versions)" != ""
# YD 04/07/06 seems null, confuses rc cli: -i $(SOLARTESDIR)
$(COMMAND_ECHO)$(RC) -r -DOS2 $(INCLUDE) $(RCLINKFLAGS) $(MISC)/$(SHL$(TNR)DEFAULTRES:b).rc
.ENDIF # "$(SHL$(TNR)DEFAULTRES)"!=""
.IF "$(SHL$(TNR)ALLRES)"!=""
$(COMMAND_ECHO)+$(TYPE) $(SHL$(TNR)ALLRES) > $(SHL$(TNR)LINKRES)
.ENDIF # "$(SHL$(TNR)ALLRES)"!=""
.IF "$(USE_DEFFILE)"!=""
$(COMMAND_ECHO)$(SHL$(TNR)LINKER) $(SHL$(TNR)LINKFLAGS) $(LINKFLAGSSHL) -o $@ \
$(SHL$(TNR)DEF) \
$(STDOBJ) \
-L$(LB) \
-L$(SOLARVERSION)/$(INPATH)/lib \
$(SHL$(TNR)OBJS) $(SHL$(TNR)VERSIONOBJ) \
$(SHL$(TNR)LIBS) \
$(SHL$(TNR)LINKRES) \
$(SHL$(TNR)STDLIBS) \
$(SHL$(TNR)STDSHL) $(STDSHL$(TNR))
.ELSE # "$(USE_DEFFILE)"!=""
$(COMMAND_ECHO)$(SHL$(TNR)LINKER) $(SHL$(TNR)LINKFLAGS) \
$(LINKFLAGSSHL) $(SHL$(TNR)BASEX) \
$(SHL$(TNR)STACK) -o $(SHL$(TNR)TARGETN) \
$(SHL$(TNR)DEF) \
$(STDOBJ) \
-L$(LB) \
-L$(SOLARVERSION)/$(INPATH)/lib \
$(SHL$(TNR)OBJS) $(SHL$(TNR)VERSIONOBJ) \
$(SHL$(TNR)LIBS) \
$(SHL$(TNR)LINKRES) \
$(SHL$(TNR)STDLIBS) \
$(SHL$(TNR)STDSHL) $(STDSHL$(TNR))
.ENDIF # "$(USE_DEFFILE)"!=""
.IF "$(SHL$(TNR)USE_EXPORTS)"=="name"
#03/11/2012 if 'name' is used, export from DLL file (only names, no ordinals)
@echo Build import library from DLL file.
$(COMMAND_ECHO)+$(IMPLIB) $(IMPLIBFLAGS) $(LB)/$(SHL$(TNR)TARGETN:b).lib $@
.ENDIF # "$(SHL$(TNR)USE_EXPORTS)"==""
.IF "$(SHL$(TNR)TARGET8)" != "$(SHL$(TNR)TARGET)"
$(COMMAND_ECHO)+$(COPY) $@ $(@:d)$(SHL$(TNR)TARGET8).dll
.ENDIF
.ENDIF # "$(GUI)" == "OS2"
.ENDIF # "$(SHL$(TNR)TARGETN)"!=""
# unroll end
#######################################################
#-------------------------------------------------------------------------
#######################################################
# Anweisungen fuer das Linken
# unroll begin
.IF "$(SHL$(TNR)IMPLIBN)" != ""
.IF "$(UPDATER)"=="YES"
USELIB$(TNR)DEPN+=$(SHL$(TNR)LIBS)
.ELSE
.ENDIF
.IF "$(USE_DEFFILE)"!=""
USE_SHL$(TNR)TARGET=$(SHL$(TNR)TARGETN)
.ENDIF
.IF "$(GUI)" != "UNX"
$(SHL$(TNR)IMPLIBN): \
$(SHL$(TNR)DEF) \
$(USE_SHL$(TNR)TARGET) \
$(USELIB$(TNR)DEPN) \
$(USELIBDEPN)
.ELSE
$(SHL$(TNR)IMPLIBN): \
$(SHL$(TNR)LIBS)
.ENDIF
@echo "Making: " $(@:f)
.IF "$(GUI)" == "WNT"
.IF "$(COM)"=="GCC"
@echo no ImportLibs on mingw
@-$(RM) $@
@$(TOUCH) $@
.ELSE # "$(COM)=="GCC"
# bei use_deffile implib von linker erstellt
.IF "$(USE_DEFFILE)"==""
$(IMPLIB) $(IMPLIBFLAGS) @$(mktmp -out:$(SHL$(TNR)IMPLIBN) \
-def:$(SHL$(TNR)DEF) )
.ELSE # "$(USE_DEFFILE)==""
@echo build of $(SHL$(TNR)TARGETN) creates $@
@$(TOUCH) $@
.ENDIF # "$(USE_DEFFILE)==""
.ENDIF # "$(COM)"=="GCC"
.ELIF "$(GUI)" == "OS2"
@echo Import libs generated with .def file or with .dll file.
# make 'dmake' happy
@-$(RM) $@
@$(TOUCH) $@
.ELSE
@echo no ImportLibs on Mac and *ix
@-$(RM) $@
@$(TOUCH) $@
.ENDIF
.ENDIF
# unroll end
#######################################################