diff options
author | Peter Foley <pefoley2@verizon.net> | 2011-12-24 09:44:24 -0500 |
---|---|---|
committer | Peter Foley <pefoley2@verizon.net> | 2011-12-24 09:44:24 -0500 |
commit | fd6649175956c9d322fe02fd413fe6970aa6819e (patch) | |
tree | ce2691616f82ef55d3b8f3e45812777477e8668f /solenv | |
parent | 79b252a56db8f1c2159d3269de415ffe2f2d9bb1 (diff) | |
parent | a8feb5b1df99c12a5cb644097f935e9ccf512ed5 (diff) |
Merge remote-tracking branch 'origin/master' into feature/gbuild_extensions
Conflicts:
Module_tail_build.mk
Repository.mk
extensions/util/makefile.pmk
postprocess/prj/build.lst
svx/AllLangResTarget_svx.mk
Diffstat (limited to 'solenv')
28 files changed, 302 insertions, 115 deletions
diff --git a/solenv/bin/callcatchEnv.Set.sh b/solenv/bin/callcatchEnv.Set.sh index 0dacfd79a57b..586a2ab632d7 100644 --- a/solenv/bin/callcatchEnv.Set.sh +++ b/solenv/bin/callcatchEnv.Set.sh @@ -5,3 +5,4 @@ AR="callarchive ${AR:-ar}" LINK="callcatcher $CXX" LIBMGR="callarchive ${LIBMGR:-ar}" export CC CXX AR LINK LIBMGR +export dbglevel=2 diff --git a/solenv/bin/concat-deps.c b/solenv/bin/concat-deps.c index d699e8214063..a0eda4359206 100644 --- a/solenv/bin/concat-deps.c +++ b/solenv/bin/concat-deps.c @@ -3,8 +3,8 @@ * License: GPLv3 */ -//* define to activate stats reporting on hash usage -#define HASH_STAT +/* define to activate stats reporting on hash usage*/ +/* #define HASH_STAT */ /* =============================================== * Set-up: defines to identify the system and system related properties @@ -36,7 +36,9 @@ #define USE_MEMORY_ALIGNMENT 64 /* big value -> no alignment */ #endif /* Def __CYGWIN__ */ -#ifdef __linux +#if defined(__linux) || defined(__OpenBSD__) || \ + defined(__FreeBSD__) || defined(__NetBSD__) || \ + defined(__DragonFly__) #if __BYTE_ORDER == __LITTLE_ENDIAN #define CORE_BIG_ENDIAN 0 #define CORE_LITTLE_ENDIAN 1 @@ -48,7 +50,7 @@ #define USE_MEMORY_ALIGNMENT 4 #endif /* __BYTE_ORDER == __BIG_ENDIAN */ #endif /* !(__BYTE_ORDER == __LITTLE_ENDIAN) */ -#endif /* Def __linux */ +#endif /* Def __linux || Def *BSD */ #ifdef __sun #ifdef __sparc @@ -566,7 +568,6 @@ int cost = 0; { hash->collisions += 1; hash->cost += cost; -// fprintf(stderr, "key colision %s and %s\n", key, hash_elem->next->key); } #endif hash->array[hashed] = hash_elem; @@ -678,12 +679,28 @@ int fd; return buffer; } +static void _cancel_relative(char* base, char** ref_cursor, char** ref_cursor_out, char* end) +{ + char* cursor = *ref_cursor; + char* cursor_out = *ref_cursor_out; + + do + { + cursor += 3; + while(cursor_out > base && *--cursor_out != '/'); + } + while(cursor + 3 < end && !memcmp(cursor, "/../", 4)); + *ref_cursor = cursor; + *ref_cursor_out = cursor_out; +} + static int _process(struct hash* dep_hash, char* fn) { int rc; char* buffer; char* end; char* cursor; +char* cursor_out; char* base; int continuation = 0; char last_ns = 0; @@ -697,20 +714,31 @@ off_t size; */ if(!rc) { - base = cursor = end = buffer; + base = cursor_out = cursor = end = buffer; end += size; while(cursor < end) { if(*cursor == '\\') { continuation = 1; - cursor += 1; + *cursor_out++ = *cursor++; + } + else if(*cursor == '/') + { + if(cursor + 3 < end) + { + if(!memcmp(cursor, "/../", 4)) + { + _cancel_relative(base, &cursor, &cursor_out, end); + } + } + *cursor_out++ = *cursor++; } else if(*cursor == '\n') { if(!continuation) { - *cursor = 0; + *cursor_out = 0; if(base < cursor) { /* here we have a complete rule */ @@ -720,7 +748,7 @@ off_t size; * these are the one for which we want to filter * duplicate out */ - if(hash_store(dep_hash, base, (int)(cursor - base))) + if(hash_store(dep_hash, base, (int)(cursor_out - base))) { puts(base); putc('\n', stdout); @@ -734,14 +762,14 @@ off_t size; } } cursor += 1; - base = cursor; + base = cursor_out = cursor; } else { /* here we have a '\' followed by \n this is a continuation * i.e not a complete rule yet */ - cursor += 1; + *cursor_out++ = *cursor++; } } else @@ -752,15 +780,15 @@ off_t size; { last_ns = *cursor; } - cursor += 1; + *cursor_out++ = *cursor++; } } /* just in case the file did not end with a \n, there may be a pending rule */ - if(base < cursor) + if(base < cursor_out) { if(last_ns == ':') { - if(hash_store(dep_hash, base, (int)(cursor - base))) + if(hash_store(dep_hash, base, (int)(cursor_out - base))) { puts(base); putc('\n', stdout); diff --git a/solenv/bin/ooinstall b/solenv/bin/ooinstall index cf9ad9e1fc35..794e81b930df 100755 --- a/solenv/bin/ooinstall +++ b/solenv/bin/ooinstall @@ -116,6 +116,15 @@ if ($is_windows) { "-msilanguage $ENV{SRC_ROOT}/instsetoo_native/$ENV{INPATH}/misc/win_ulffiles"; } +# FIXME: a better solution would be to fix installer to deal with broken symlinks +# make distro-pack-install shufle with the SDK installation to make it LSB compliant +# it creates symlinks from the orignal path to /usr/share; they are not valid with $DESTDIR +# and potential second ooinstall call fails with strange error messages if the old tree is still there +if ($destdir && "$ENV{DESTDIR}" ne "/" && -d "$ENV{DESTDIR}") { + print "Cleaning destdir...\n"; + system ("rm -rf \"$ENV{DESTDIR}\"") && die "Failed to clean up destdir: $!"; +} + print "Running LibreOffice installer\n"; system ("cd $ENV{SRC_ROOT}/instsetoo_native/util ; " . "perl -w $ENV{SOLARENV}/bin/make_installer.pl " . diff --git a/solenv/gbuild/AllLangResTarget.mk b/solenv/gbuild/AllLangResTarget.mk index 78bfbf846072..1329f2aa5f25 100644 --- a/solenv/gbuild/AllLangResTarget.mk +++ b/solenv/gbuild/AllLangResTarget.mk @@ -133,6 +133,19 @@ endif endef # SrsTemplateTarget class +# +# This class handles src templates. +# +# Templates are src files that contain only macros that are then used +# from other src files, but these macros contain translatable strings. +# Because the processing of src files is done in two phases: 1/ +# localization and 2/ merging, templates must be translated +# independently from the src files that include them. Special care must +# be taken to ensure that the right file (i.e., the localized one) is +# included; in order to do that, the templates in the source tree are +# called foo_tmpl.src, but the localization phase produces foo.src, and +# these names (i.e., without the _tmpl suffix) must be placed in +# #include statements in other src files. define gb_SrsTemplateTarget__command $(call gb_Helper_abbreviate_dirs,\ @@ -140,6 +153,15 @@ define gb_SrsTemplateTarget__command touch $(1)) endef +# This machinery ensures that templates are regenerated when switching +# from localized to unlocalized configuration and back. +# +# How it works: +# We let _get_target depend on _get_update_target, so after they are +# done, _get_target is newer than _get_update_target. If +# WITH_LANG changes (from nonempty to empty or the other way around), +# _get_target and _get_update_target are switched, therefore _get_target +# is now _older_ than _get_update_target and must be regenerated :-) gb_SrsTemplateTarget__get_merged_target = $(call gb_SrsTemplateTarget_get_target,$(1))_merged_last gb_SrsTemplateTarget__get_unmerged_target = $(call gb_SrsTemplateTarget_get_target,$(1))_unmerged_last @@ -309,7 +331,6 @@ $(call gb_ResTarget_get_target,%) : $(gb_Helper_MISCDUMMY) | $(gb_ResTarget_RSCT -lip=$(realpath $(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/imglst/$(LANGUAGE)) \ -lip=$(realpath $(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/imglst) \ -lip=$(realpath $(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/res/$(LANGUAGE)) \ - -lip=$(realpath $(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/res/imagelst) \ -lip=$(realpath $(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)/res) \ -lip=$(realpath $(gb_ResTarget_DEFIMAGESLOCATION)$(RESLOCATION)) \ -lip=$(gb_ResTarget_DEFIMAGESLOCATION)res/$(LANGUAGE) \ diff --git a/solenv/gbuild/ComponentTarget.mk b/solenv/gbuild/ComponentTarget.mk index 031d118310c5..efe481991a19 100644 --- a/solenv/gbuild/ComponentTarget.mk +++ b/solenv/gbuild/ComponentTarget.mk @@ -58,7 +58,8 @@ $(call gb_ComponentTarget_get_outdir_target,%) : define gb_ComponentTarget_ComponentTarget $(call gb_ComponentTarget_get_target,$(1)) : COMPONENTPREFIX := $(2) $(call gb_ComponentTarget_get_target,$(1)) : LIBFILENAME := $(3) -$(call gb_ComponentTarget_get_outdir_target,$(1)) : $(call gb_ComponentTarget_get_target,$(1)) +$(call gb_ComponentTarget_get_outdir_target,$(1)) : \ + $(call gb_ComponentTarget_get_target,$(1)) $(call gb_Deliver_add_deliverable,$(call gb_ComponentTarget_get_outdir_target,$(1)),$(call gb_ComponentTarget_get_target,$(1)),$(1)) endef diff --git a/solenv/gbuild/CppunitTest.mk b/solenv/gbuild/CppunitTest.mk index aa87be6ede7c..0d8959e0c841 100644 --- a/solenv/gbuild/CppunitTest.mk +++ b/solenv/gbuild/CppunitTest.mk @@ -153,9 +153,9 @@ endef define gb_CppunitTest_add_component $(call gb_CppunitTest_get_target,$(1)) : \ - $(call gb_ComponentTarget_get_target,$(2)) + $(call gb_ComponentTarget_get_outdir_target,$(2)) $(call gb_CppunitTest_get_target,$(1)) : \ - UNO_SERVICES += $(call gb_ComponentTarget_get_target,$(2)) + UNO_SERVICES += $(call gb_ComponentTarget_get_outdir_target,$(2)) endef diff --git a/solenv/gbuild/CustomTarget.mk b/solenv/gbuild/CustomTarget.mk index 1e075af777d1..84c6f11cb206 100644 --- a/solenv/gbuild/CustomTarget.mk +++ b/solenv/gbuild/CustomTarget.mk @@ -56,20 +56,23 @@ endef define gb_CustomTarget_CustomTarget $(call gb_CustomTarget_get_target,$(1)) : \ $(call gb_CustomTarget__get_makefile,$(1)) + endef define gb_CustomTarget_add_dependency -$(eval $(call gb_CustomTarget_get_target,$(1)) : \ - $(SRCDIR)/$(2)) +$(call gb_CustomTarget_get_target,$(1)) : $(SRCDIR)/$(2) + endef define gb_CustomTarget_add_dependencies $(foreach dependency,$(2),$(call gb_CustomTarget_add_dependency,$(1),$(dependency))) + endef define gb_CustomTarget_add_outdir_dependency -$(eval $(call gb_CustomTarget_get_target,$(1)) : $(2)) +$(call gb_CustomTarget_get_target,$(1)) : $(2) + endef define gb_CustomTarget_add_outdir_dependencies diff --git a/solenv/gbuild/Deliver.mk b/solenv/gbuild/Deliver.mk index 165d3306c3e4..1387892312c2 100644 --- a/solenv/gbuild/Deliver.mk +++ b/solenv/gbuild/Deliver.mk @@ -56,11 +56,11 @@ endef ifeq ($(strip $(gb_Deliver_GNUCOPY)),) define gb_Deliver__deliver -mkdir -p $(dir $(2)) && $(if $(gb_Deliver_CLEARONDELIVER),rm -f $(2) &&) $(if $(gb_Deliver_HARDLINK),ln,cp -f) $(1) $(2) && touch -r $(1) $(2) +mkdir -p $(dir $(2)) && $(if $(gb_Deliver_CLEARONDELIVER),rm -f $(2) &&) $(if $(gb_Deliver_HARDLINK),ln,cp -P -f) $(1) $(2) && touch -r $(1) $(2) endef else define gb_Deliver__deliver -mkdir -p $(dir $(2)) && $(gb_Deliver_GNUCOPY) $(if $(gb_Deliver_CLEARONDELIVER),--remove-destination) $(if $(gb_Deliver_HARDLINK),--link) --force --preserve=timestamps $(1) $(2) +mkdir -p $(dir $(2)) && $(gb_Deliver_GNUCOPY) $(if $(gb_Deliver_CLEARONDELIVER),--remove-destination) $(if $(gb_Deliver_HARDLINK),--link) --no-dereference --force --preserve=timestamps $(1) $(2) endef endif diff --git a/solenv/gbuild/Jar.mk b/solenv/gbuild/Jar.mk index 6a108ba7e1a3..f1fe1444c8f4 100644 --- a/solenv/gbuild/Jar.mk +++ b/solenv/gbuild/Jar.mk @@ -48,6 +48,12 @@ endef # creates the target folder of the jar file if it doesn't exist # creates the jar file # jar program does not remove the target in case of error, so rm it manually +# XXX: PACKAGEDIRS need special treatment, because sometimes we need to +# add into the jar another class hierarchy created outside of our class +# set (e.g., by javamaker). Because jar does not allow two same root dirs +# when creating the archive, we work around this deficiency by creating +# the archive with the main class hierarchy and then updating it from +# the other one(s), which seems to work .-) define gb_Jar__command $(call gb_Output_announce,$*,$(true),JAR,3) $(call gb_Helper_abbreviate_dirs_native,\ @@ -59,6 +65,7 @@ define gb_Jar__command mkdir -p $(dir $(2)) && cd $(call gb_Jar_get_workdir,$(1)) && \ $(gb_Jar_JARCOMMAND) cfm $(2) $(call gb_Jar_get_manifest_target,$(1)) \ META-INF $(PACKAGEROOTS) $(PACKAGEFILES) \ + $(foreach root,$(PACKAGEDIRS),&& $(gb_Jar_JARCOMMAND) uf $(2) -C $(dir $(root)) $(notdir $(root))) \ || (rm $(2); false) ) endef @@ -84,6 +91,7 @@ define gb_Jar_Jar $(call gb_Jar_get_target,$(1)) : MANIFEST := $(call gb_Jar_get_target,$(1)) : JARCLASSPATH := $(call gb_Jar_get_target,$(1)) : PACKAGEROOTS := +$(call gb_Jar_get_target,$(1)) : PACKAGEDIRS := $(call gb_Jar_get_target,$(1)) : PACKAGEFILES := $(call gb_JavaClassSet_JavaClassSet,$(call gb_Jar_get_classsetname,$(1))) $(call gb_JavaClassSet_set_classpath,$(call gb_Jar_get_classsetname,$(1)),$(value XCLASSPATH)) @@ -96,11 +104,24 @@ endef # source files are forwarded to the ClassSet define gb_Jar_add_sourcefile $(call gb_JavaClassSet_add_sourcefile,$(call gb_Jar_get_classsetname,$(1)),$(2)) + endef -# PACKAGEROOTS is the list of all root folders to pack into the jar (without META-INF as this is added automatically) +# PACKAGEROOTS is the list of all root folders created by the JavaClassSet to pack into the jar (without META-INF as this is added automatically) define gb_Jar_set_packageroot $(call gb_Jar_get_target,$(1)) : PACKAGEROOTS := $(2) + +endef +# +# PACKAGEDIRS is the list of additional root directories to pack into the jar +define gb_Jar_add_packagedir +$(call gb_Jar_get_target,$(1)) : PACKAGEDIRS += $(2) + +endef + +define gb_Jar_add_packagedirs +$(foreach packagedir,$(2),$(call gb_Jar_add_packagedir,$(1),$(packagedir))) + endef # PACKAGEFILES is the list of all root files to pack into the jar @@ -115,16 +136,28 @@ endef define gb_Jar_add_sourcefiles $(foreach sourcefile,$(2),$(call gb_Jar_add_sourcefile,$(1),$(sourcefile))) + +endef + +define gb_Jar_add_generated_sourcefile +$(call gb_JavaClassSet_add_generated_sourcefile,$(call gb_Jar_get_classsetname,$(1)),$(2)) + +endef + +define gb_Jar_add_generated_sourcefiles +$(foreach sourcefile,$(2),$(call gb_Jar_add_generated_sourcefile,$(1),$(sourcefile))) + endef define gb_JarTest_set_classpath $(call gb_JavaClassSet_set_classpath,$(call gb_Jar_get_classsetname,$(1)),$(2)) + endef # JARCLASSPATH is the class path that is written to the manifest of the jar define gb_Jar_set_jarclasspath - $(call gb_Jar_get_target,$(1)) : JARCLASSPATH := $(2) + endef # provide a manifest template containing jar specific information to be written into the manifest @@ -139,27 +172,33 @@ endef # remember: classpath is "inherited" to ClassSet define gb_Jar_add_jar $(call gb_JavaClassSet_add_jar,$(call gb_Jar_get_classsetname,$(1)),$(2)) + endef define gb_Jar_add_system_jar $(call gb_JavaClassSet_add_system_jar,$(call gb_Jar_get_classsetname,$(1)),$(2)) + endef # specify jars with imported modules define gb_Jar_add_jars $(call gb_JavaClassSet_add_jars,$(call gb_Jar_get_classsetname,$(1)),$(2)) + endef define gb_Jar_add_system_jars $(call gb_JavaClassSet_add_system_jars,$(call gb_Jar_get_classsetname,$(1)),$(2)) + endef define gb_Jar_use_external $(call gb_JavaClassSet_use_external,$(call gb_Jar_get_classsetname,$(1)),$(2)) + endef define gb_Jar_use_externals $(call gb_JavaClassSet_use_externals,$(call gb_Jar_get_classsetname,$(1)),$(2)) + endef # possible directories for jar files containing UNO services diff --git a/solenv/gbuild/JavaClassSet.mk b/solenv/gbuild/JavaClassSet.mk index 4c8d7cfc5603..6befda19aa2c 100644 --- a/solenv/gbuild/JavaClassSet.mk +++ b/solenv/gbuild/JavaClassSet.mk @@ -62,15 +62,20 @@ $(call gb_JavaClassSet_get_clean_target,%) : define gb_JavaClassSet_JavaClassSet $(call gb_JavaClassSet_get_target,$(1)) : JARDEPS := + endef define gb_JavaClassSet__get_sourcefile $(SRCDIR)/$(1).java endef +define gb_JavaClassSet__get_generated_sourcefile +$(WORKDIR)/$(1).java +endef + define gb_JavaClassSet_add_sourcefile -$(eval $(call gb_JavaClassSet_get_target,$(1)) : \ - $(call gb_JavaClassSet__get_sourcefile,$(2))) +$(call gb_JavaClassSet_get_target,$(1)) : $(call gb_JavaClassSet__get_sourcefile,$(2)) + endef define gb_JavaClassSet_add_sourcefiles @@ -78,43 +83,60 @@ $(foreach sourcefile,$(2),$(call gb_JavaClassSet_add_sourcefile,$(1),$(sourcefil endef +define gb_JavaClassSet_add_generated_sourcefile +$(call gb_JavaClassSet_get_target,$(1)) : $(call gb_JavaClassSet__get_generated_sourcefile,$(2)) +$(call gb_JavaClassSet__get_generated_sourcefile,$(2)) : $(gb_Helper_PHONY) + +endef + +define gb_JavaClassSet_add_generated_sourcefiles +$(foreach sourcefile,$(2),$(call gb_JavaClassSet_add_generated_sourcefile,$(1),$(sourcefile))) + +endef + define gb_JavaClassSet_set_classpath -$(eval $(call gb_JavaClassSet_get_target,$(1)) : T_CP := $(2)) +$(call gb_JavaClassSet_get_target,$(1)) : T_CP := $(2) endef # problem: currently we can't get these dependencies to work # build order dependency is a hack to get these prerequisites out of the way in the build command define gb_JavaClassSet_add_jar -$(eval $(call gb_JavaClassSet_get_target,$(1)) : $(2)) -$(eval $(call gb_JavaClassSet_get_target,$(1)) : T_CP := $$(T_CP)$(gb_CLASSPATHSEP)$(strip $(2))) -$(eval $(call gb_JavaClassSet_get_target,$(1)) : JARDEPS += $(2)) +$(call gb_JavaClassSet_get_target,$(1)) : $(2) +$(call gb_JavaClassSet_get_target,$(1)) : T_CP := $$(T_CP)$(gb_CLASSPATHSEP)$(strip $(2)) +$(call gb_JavaClassSet_get_target,$(1)) : JARDEPS += $(2) + endef # this does not generate dependency on the jar define gb_JavaClassSet_add_system_jar -$(eval $(call gb_JavaClassSet_get_target,$(1)) : T_CP := $$(T_CP)$(gb_CLASSPATHSEP)$(strip $(2))) -$(eval $(call gb_JavaClassSet_get_target,$(1)) : JARDEPS += $(2)) +$(call gb_JavaClassSet_get_target,$(1)) : T_CP := $$(T_CP)$(gb_CLASSPATHSEP)$(strip $(2)) +$(call gb_JavaClassSet_get_target,$(1)) : JARDEPS += $(2) + endef define gb_JavaClassSet_add_jars $(foreach jar,$(2),$(call gb_JavaClassSet_add_jar,$(1),$(jar))) + endef define gb_JavaClassSet_add_system_jars $(foreach jar,$(2),$(call gb_JavaClassSet_add_system_jar,$(1),$(jar))) + endef # this forwards to functions that must be defined in RepositoryExternal.mk. -# $(call gb_LinkTarget_use_external,library,external) +# $(eval $(call gb_LinkTarget_use_external,library,external)) define gb_JavaClassSet_use_external -$(eval $(if $(value gb_JavaClassSet__use_$(2)),\ +$(if $(value gb_JavaClassSet__use_$(2)),\ $(call gb_JavaClassSet__use_$(2),$(1)),\ - $(error gb_JavaClassSet_use_external: unknown external: $(2)))) + $(error gb_JavaClassSet_use_external: unknown external: $(2))) + endef define gb_JavaClassSet_use_externals $(foreach external,$(2),$(call gb_JavaClassSet_use_external,$(1),$(external))) + endef # vim: set noet sw=4: diff --git a/solenv/gbuild/Library.mk b/solenv/gbuild/Library.mk index 0de2876c89ec..b9173ea74645 100644 --- a/solenv/gbuild/Library.mk +++ b/solenv/gbuild/Library.mk @@ -39,6 +39,8 @@ # gb_Library_Library_platform # gb_Library_TARGETS +# doesn't do anything, just used for hooking up component target +.PHONY: $(call gb_Library__get_final_target,%) # EVIL: gb_StaticLibrary and gb_Library need the same deliver rule because they are indistinguishable on windows .PHONY : $(WORKDIR)/Clean/OutDir/lib/%$(gb_Library_PLAINEXT) @@ -69,21 +71,47 @@ $(call gb_LinkTarget_set_targettype,$(2),Library) $(call gb_LinkTarget_add_defs,$(2),\ $(gb_Library_DEFS) \ ) +$(call gb_Library__get_final_target,$(1)) : $(call gb_Library_get_target,$(1)) $(call gb_Library_get_target,$(1)) : $(call gb_LinkTarget_get_target,$(2)) $(call gb_Library_get_clean_target,$(1)) : $(call gb_LinkTarget_get_clean_target,$(2)) $(call gb_Library_Library_platform,$(1),$(2),$(gb_Library_DLLDIR)/$(call gb_Library_get_dllname,$(1))) -$$(eval $$(call gb_Module_register_target,$(call gb_Library_get_target,$(1)),$(call gb_Library_get_clean_target,$(1)))) +$$(eval $$(call gb_Module_register_target,$(call gb_Library__get_final_target,$(1)),$(call gb_Library_get_clean_target,$(1)))) $(call gb_Deliver_add_deliverable,$(call gb_Library_get_target,$(1)),$(call gb_LinkTarget_get_target,$(2)),$(1)) endef +define gb_Library__set_soversion_script +$(call gb_LinkTarget_get_target,$(call gb_Library_get_linktargetname,$(1))) : \ + $(3) +$(call gb_Library_get_target,$(1)) : SOVERSION := $(2) +$(call gb_Library_get_target,$(1)) : SOVERSIONSCRIPT := $(3) +$(call gb_Library_get_target,$(1)) \ +$(call gb_Library_get_clean_target,$(1)) : \ + AUXTARGETS += $(call gb_Library_get_target,$(1)).$(2) +$(call gb_LinkTarget_add_auxtargets,$(call gb_Library_get_linktargetname,$(1)),\ + $(call gb_LinkTarget_get_target,$(call gb_Library_get_linktargetname,$(1))).$(2)) +endef + +# for libraries that maintain stable ABI: set SOVERSION and version script +# $(call gb_Library_set_soversion_script,soversion,versionscript) +define gb_Library_set_soversion_script +$(if $(2),,$(call gb_Output_error,gb_Library_set_soversion_script: no version)) +$(if $(3),,$(call gb_Output_error,gb_Library_set_soversion_script: no script)) +$(call gb_Library__set_soversion_script_platform,$(1),$(2),$(3)) +endef + +# The dependency from workdir component target to outdir library should ensure +# that gb_CppunitTest_add_component can transitively depend on the library. +# But the component target also must be delivered, so a new phony target +# gb_Library__get_final_target has been invented for that purpose... define gb_Library_set_componentfile $(call gb_ComponentTarget_ComponentTarget,$(2),$(call gb_Library__get_componentprefix,$(1)),\ $(call gb_Library_get_runtime_filename,$(if $(MERGELIBS),$(if $(filter $(gb_MERGED_LIBS),$(1)),merged,$(1)),$(1)))) -$(call gb_LinkTarget_get_target,$(call gb_Library_get_linktargetname,$(1))) : \ +$(call gb_Library__get_final_target,$(1)) : \ $(call gb_ComponentTarget_get_outdir_target,$(2)) -$(call gb_Library_get_clean_target,$(1)) : $(call gb_ComponentTarget_get_clean_target,$(or $(strip $(3)),$(strip $(2)))) - +$(call gb_ComponentTarget_get_target,$(2)) :| $(call gb_Library_get_target,$(1)) +$(call gb_Library_get_clean_target,$(1)) : \ + $(call gb_ComponentTarget_get_clean_target,$(2)) endef gb_Library__get_componentprefix = \ diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk index 94fcca6e13c2..e4dbd469a96d 100644 --- a/solenv/gbuild/LinkTarget.mk +++ b/solenv/gbuild/LinkTarget.mk @@ -338,7 +338,7 @@ $(call gb_Helper_abbreviate_dirs,\ $(foreach object,$(8),$(call gb_GenCObject_get_dep_target,$(object))) \ $(foreach object,$(9),$(call gb_GenCxxObject_get_dep_target,$(object))) \ ) && \ - $(SOLARENV)/bin/concat-deps.pl $${RESPONSEFILE} > $(1)) && \ + $(SOLARENV)/bin/concat-deps $${RESPONSEFILE} > $(1)) && \ rm -f $${RESPONSEFILE} endef @@ -910,7 +910,12 @@ $(call gb_LinkTarget_get_target,$(1)) : DLLTARGET := $(2) endef define gb_LinkTarget_set_auxtargets -$(call gb_LinkTarget_get_clean_target,$(1)) : AUXTARGETS := $(2) +$$(call gb_Output_error,\ + gb_LinkTarget_set_auxtargets: use gb_LinkTarget_add_auxtargets instead.) +endef + +define gb_LinkTarget_add_auxtargets +$(call gb_LinkTarget_get_clean_target,$(1)) : AUXTARGETS += $(2) endef define gb_LinkTarget__add_internal_headers diff --git a/solenv/gbuild/TargetLocations.mk b/solenv/gbuild/TargetLocations.mk index b7a4fde912b5..cbe2ee747596 100644 --- a/solenv/gbuild/TargetLocations.mk +++ b/solenv/gbuild/TargetLocations.mk @@ -133,6 +133,8 @@ gb_XcuResTarget_get_target = $(WORKDIR)/XcuResTarget/$(1) gb_Zip_get_target = $(WORKDIR)/Zip/$(1).zip gb_Zip_get_final_target = $(WORKDIR)/Zip/$(1).done +gb_Library__get_final_target = $(WORKDIR)/Dummy/$(1) + define gb_Library_get_external_headers_target $(patsubst $(1):%,$(WORKDIR)/ExternalHeaders/Library/%,$(filter $(1):%,$(gb_Library_FILENAMES))) endef diff --git a/solenv/gbuild/extensions/post_AuxTargets.mk b/solenv/gbuild/extensions/post_AuxTargets.mk index b98ef3df1348..72414b7d771b 100644 --- a/solenv/gbuild/extensions/post_AuxTargets.mk +++ b/solenv/gbuild/extensions/post_AuxTargets.mk @@ -27,6 +27,14 @@ .PHONY: id tags docs distro-pack-install install fetch clean-host clean-build bootstrap +$(WORKDIR)/bootstrap: + @cd $(SRCDIR) && ./bootstrap + @mkdir -p $(dir $@) && touch $@ + +bootstrap: $(WORKDIR)/bootstrap + +autogen.lastrun: + ifneq ($(gb_SourceEnvAndRecurse_STAGE),buildpl) id: @@ -56,14 +64,6 @@ fetch: $(SRCDIR)/Env.Host.sh: autogen.lastrun configure.in ooo.lst.in set_soenv.in $(if $(filter reconfigure,$(gb_SourceEnvAndRecurse_STAGE)),$(SRCDIR)/autogen.sh,@echo "cannot reconfigure from within solarenv" && rm -f $(SRCDIR)/Env.Host.sh && exit 2) -autogen.lastrun: - - -$(WORKDIR)/bootstrap: - @cd $(SRCDIR) && ./bootstrap - @mkdir -p $(dir $@) && touch $@ - -bootstrap: $(WORKDIR)/bootstrap ifeq ($(strip $(gb_PARTIALBUILD)),) @@ -78,8 +78,8 @@ clean-build: distclean: clean if [ -f $(SRCDIR)/dmake/Makefile ] ; then $(GNUMAKE) -C $(SRCDIR)/dmake clean; fi - cd $(SRCDIR) && rm -rf Env.Host.sh aclocal.m4 autogen.lastrun autom4te.cache \ - bin/repo-list build_env config.log config.status configure \ + cd $(SRCDIR) && rm -rf Env.Host.sh autogen.lastrun autom4te.cache \ + bin/repo-list build_env config.log config.status \ desktop/scripts/soffice.sh ooo.lst post_download post_download.log \ set_soenv set_soenv.last set_soenv.stamp src.downloaded warn @@ -113,15 +113,6 @@ distro-pack-install: $(SRCDIR)/Env.Host.sh: @true -autogen.lastrun: - @true - -$(WORKDIR)/bootstrap: - @true - -bootstrap: - @true - clean-host: @true diff --git a/solenv/gbuild/gbuild.mk b/solenv/gbuild/gbuild.mk index 521a9c929071..a75fda279bb7 100644 --- a/solenv/gbuild/gbuild.mk +++ b/solenv/gbuild/gbuild.mk @@ -194,9 +194,13 @@ gb_GLOBALDEFS += \ else gb_GLOBALDEFS += \ -DDBG_UTIL \ + +ifneq ($(COM),MSC) +gb_GLOBALDEFS += \ -D_DEBUG \ endif +endif ifneq ($(strip $(SOLAR_JAVA)),) gb_GLOBALDEFS += -DSOLAR_JAVA diff --git a/solenv/gbuild/gbuild_simple.mk b/solenv/gbuild/gbuild_simple.mk index aeac005e4bd4..a4cdb0d73847 100644 --- a/solenv/gbuild/gbuild_simple.mk +++ b/solenv/gbuild/gbuild_simple.mk @@ -46,8 +46,6 @@ include $(GBUILDDIR)/BuildDirs.mk # I think any use of gbuild_simple.mk is in a sub-make under one that # uses gbuild.mk anyway. -# gb_PRODUCT is used by windows.mk to decide which C/C++ runtime to -# link with. ifneq ($(strip $(PRODUCT)$(product)),) gb_PRODUCT := $(true) else diff --git a/solenv/gbuild/platform/ANDROID_ARM_GCC.mk b/solenv/gbuild/platform/ANDROID_ARM_GCC.mk index 775f803040a3..309dc6ac5d1d 100644 --- a/solenv/gbuild/platform/ANDROID_ARM_GCC.mk +++ b/solenv/gbuild/platform/ANDROID_ARM_GCC.mk @@ -33,6 +33,15 @@ gb_CFLAGS += -fno-omit-frame-pointer include $(GBUILDDIR)/platform/unxgcc.mk +# Link almost everything with -lgnustl_shared +gb_STDLIBS := \ + gnustl_shared + +gb_Library_PLAINLIBS_NONE := \ + android \ + gnustl_shared \ + log \ + # No unit testing can be run gb_CppunitTest_CPPTESTPRECOMMAND := : @@ -58,7 +67,6 @@ $(call gb_Helper_abbreviate_dirs,\ -Wl$(COMMA)--start-group $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) -Wl$(COMMA)--end-group \ $(LIBS) \ $(patsubst lib%.a,-l%,$(patsubst lib%.so,-l%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib))))) \ - -llog -landroid -lgnustl_shared \ -o $(1)) endef @@ -86,4 +94,6 @@ endef gb_LinkTarget_LDFLAGS := $(subst -Wl$(COMMA)-rpath-link$(COMMA)$(SYSBASE)/lib:$(SYSBASE)/usr/lib,,$(gb_LinkTarget_LDFLAGS)) +gb_Library__set_soversion_script_platform = + # vim: set noet sw=4: diff --git a/solenv/gbuild/platform/OPENBSD_INTEL_GCC.mk b/solenv/gbuild/platform/OPENBSD_INTEL_GCC.mk index 17b271526ade..acebb04da5e6 100644 --- a/solenv/gbuild/platform/OPENBSD_INTEL_GCC.mk +++ b/solenv/gbuild/platform/OPENBSD_INTEL_GCC.mk @@ -33,24 +33,29 @@ gb_STDLIBS := pthread include $(GBUILDDIR)/platform/unxgcc.mk -gb_LinkTarget_NOEXCEPTIONFLAGS += -DBOOST_NO_EXCEPTIONS - define gb_LinkTarget__command_dynamiclink $(call gb_Helper_abbreviate_dirs,\ -mkdir -p $(dir $(1)) && \ + mkdir -p $(dir $(1)) && \ $(gb_CXX) \ $(if $(filter Library CppunitTest,$(TARGETTYPE)),$(gb_Library_TARGETTYPEFLAGS)) \ + $(if $(filter Library,$(TARGETTYPE)),$(gb_Library_LTOFLAGS)) \ + $(if $(SOVERSION),-Wl$(COMMA)--soname=$(notdir $(1)).$(SOVERSION)) \ + $(if $(SOVERSIONSCRIPT),-Wl$(COMMA)--version-script=$(SOVERSIONSCRIPT))\ $(subst \d,$$,$(RPATH)) \ $(T_LDFLAGS) \ $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ + $(foreach object,$(ASMOBJECTS),$(call gb_AsmObject_get_target,$(object))) \ $(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_target,$(object))) \ $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ $(foreach extraobjectlist,$(EXTRAOBJECTLISTS),`cat $(extraobjectlist)`) \ -Wl$(COMMA)--start-group $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) -Wl$(COMMA)--end-group \ $(LIBS) \ $(subst -lpthread,$(PTHREAD_LIBS),$(patsubst lib%.a,-l%,$(patsubst lib%.so,-l%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib)))))) \ - -o $(1)) + -o $(if $(SOVERSION),$(1).$(SOVERSION),$(1))) + $(if $(SOVERSION),ln -sf $(notdir $(1)).$(SOVERSION) $(1)) endef +gb_LinkTarget_NOEXCEPTIONFLAGS += -DBOOST_NO_EXCEPTIONS + # vim: set noet sw=4: diff --git a/solenv/gbuild/platform/OPENBSD_X86_64_GCC.mk b/solenv/gbuild/platform/OPENBSD_X86_64_GCC.mk index 89724a675afb..5eaa617bd6b3 100644 --- a/solenv/gbuild/platform/OPENBSD_X86_64_GCC.mk +++ b/solenv/gbuild/platform/OPENBSD_X86_64_GCC.mk @@ -32,24 +32,29 @@ gb_STDLIBS := pthread include $(GBUILDDIR)/platform/unxgcc.mk -gb_LinkTarget_NOEXCEPTIONFLAGS += -DBOOST_NO_EXCEPTIONS - define gb_LinkTarget__command_dynamiclink $(call gb_Helper_abbreviate_dirs,\ -mkdir -p $(dir $(1)) && \ + mkdir -p $(dir $(1)) && \ $(gb_CXX) \ $(if $(filter Library CppunitTest,$(TARGETTYPE)),$(gb_Library_TARGETTYPEFLAGS)) \ + $(if $(filter Library,$(TARGETTYPE)),$(gb_Library_LTOFLAGS)) \ + $(if $(SOVERSION),-Wl$(COMMA)--soname=$(notdir $(1)).$(SOVERSION)) \ + $(if $(SOVERSIONSCRIPT),-Wl$(COMMA)--version-script=$(SOVERSIONSCRIPT))\ $(subst \d,$$,$(RPATH)) \ $(T_LDFLAGS) \ $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ + $(foreach object,$(ASMOBJECTS),$(call gb_AsmObject_get_target,$(object))) \ $(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_target,$(object))) \ $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ $(foreach extraobjectlist,$(EXTRAOBJECTLISTS),`cat $(extraobjectlist)`) \ -Wl$(COMMA)--start-group $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) -Wl$(COMMA)--end-group \ $(LIBS) \ $(subst -lpthread,$(PTHREAD_LIBS),$(patsubst lib%.a,-l%,$(patsubst lib%.so,-l%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib)))))) \ - -o $(1)) + -o $(if $(SOVERSION),$(1).$(SOVERSION),$(1))) + $(if $(SOVERSION),ln -sf $(notdir $(1)).$(SOVERSION) $(1)) endef +gb_LinkTarget_NOEXCEPTIONFLAGS += -DBOOST_NO_EXCEPTIONS + # vim: set noet sw=4: diff --git a/solenv/gbuild/platform/WNT_INTEL_GCC.mk b/solenv/gbuild/platform/WNT_INTEL_GCC.mk index ac7e4be29ec9..ce4a269c820d 100644 --- a/solenv/gbuild/platform/WNT_INTEL_GCC.mk +++ b/solenv/gbuild/platform/WNT_INTEL_GCC.mk @@ -97,10 +97,7 @@ ifeq ($(MINGW_GCCLIB_EH),YES) gb_LinkTarget_LDFLAGS += -shared-libgcc endif -gb_DEBUG_CFLAGS := -ggdb3 -finline-limit=0 -fno-inline -fno-default-inline -ifeq ($(HAVE_GCC_DWARF_4),TRUE) -gb_DEBUG_CFLAGS += -gdwarf-4 -endif +gb_DEBUG_CFLAGS := -ggdb2 -finline-limit=0 -fno-inline -fno-default-inline gb_STDLIBS := \ mingwthrd \ @@ -154,10 +151,6 @@ gb_LinkTarget_CXXFLAGS := $(gb_CXXFLAGS) $(gb_CXXFLAGS_WERROR) ifeq ($(gb_SYMBOL),$(true)) gb_LinkTarget_CXXFLAGS += -ggdb2 gb_LinkTarget_CFLAGS += -ggdb2 -ifeq ($(HAVE_GCC_DWARF_4),TRUE) -gb_LinkTarget_CXXFLAGS += -gdwarf-4 -gb_LinkTarget_CFLAGS += -gdwarf-4 -endif endif gb_LinkTarget_INCLUDE +=\ @@ -281,7 +274,6 @@ gb_Library_PLAINLIBS_NONE += \ urlmon \ user32 \ uuid \ - uwinapi \ winmm \ version \ wininet \ @@ -330,7 +322,7 @@ gb_Library_ILIBEXT := .lib define gb_Library_Library_platform $(call gb_LinkTarget_set_dlltarget,$(2),$(OUTDIR)/bin/$(notdir $(3))) -$(call gb_LinkTarget_set_auxtargets,$(2),\ +$(call gb_LinkTarget_add_auxtargets,$(2),\ $(patsubst %.dll,%.map,$(3)) \ ) @@ -414,7 +406,7 @@ gb_CppunitTest_get_libfilename = test_$(1).dll define gb_CppunitTest_CppunitTest_platform $(call gb_LinkTarget_set_dlltarget,$(2),$(3)) -$(call gb_LinkTarget_set_auxtargets,$(2),\ +$(call gb_LinkTarget_add_auxtargets,$(2),\ $(patsubst %.dll,%.map,$(3)) \ ) diff --git a/solenv/gbuild/platform/WNT_INTEL_MSC.mk b/solenv/gbuild/platform/WNT_INTEL_MSC.mk index 638aade3e573..5f0fb2d633e3 100644 --- a/solenv/gbuild/platform/WNT_INTEL_MSC.mk +++ b/solenv/gbuild/platform/WNT_INTEL_MSC.mk @@ -278,7 +278,7 @@ endef # CObject class define gb_CObject__command -$(call gb_Output_announce,$(2),$(true),C ,3) +$(call gb_Output_announce,$(2).c,$(true),C ,3) $(call gb_Helper_abbreviate_dirs_native,\ mkdir -p $(dir $(1)) $(dir $(4)) && \ $(gb_CC) \ @@ -296,7 +296,7 @@ endef # CxxObject class define gb_CxxObject__command -$(call gb_Output_announce,$(2),$(true),CXX,3) +$(call gb_Output_announce,$(2).cxx,$(true),CXX,3) $(call gb_Helper_abbreviate_dirs_native,\ mkdir -p $(dir $(1)) $(dir $(4)) && \ $(if $(filter YES,$(CXXOBJECT_X64)), $(CXX_X64_BINARY), $(gb_CXX)) \ @@ -359,12 +359,11 @@ $(call gb_Helper_abbreviate_dirs_native,\ $(if $(filter YES,$(LIBRARY_X64)), -MACHINE:X64, -MACHINE:IX86) \ $(if $(filter YES,$(LIBRARY_X64)), -LIBPATH:$(COMPATH)/lib/amd64 -LIBPATH:$(WINDOWS_SDK_HOME)/lib/x64,) \ $(T_LDFLAGS) \ - $(if $(gb_PRODUCT),,-NODEFAULTLIB) \ @$${RESPONSEFILE} \ $(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib))) \ $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_filename,$(lib))) \ $(LIBS) \ - $(if $(filter-out StaticLibrary,$(TARGETTYPE)),$(if $(gb_PRODUCT),,oldnames.lib $(if $(filter libcmtd,$(LINKED_LIBS)),,msvcrtd.lib) msvcprtd.lib kernel32.lib) user32.lib) \ + $(if $(filter-out StaticLibrary,$(TARGETTYPE)),user32.lib) \ $(if $(DLLTARGET),-out:$(DLLTARGET) -implib:$(1),-out:$(1)); RC=$$?; rm $${RESPONSEFILE} \ $(if $(DLLTARGET),; if [ ! -f $(DLLTARGET) ]; then rm -f $(1) && false; fi) \ $(if $(filter Executable,$(TARGETTYPE)),; if [ -f $@.manifest ]; then mt.exe $(MTFLAGS) -manifest $@.manifest -outputresource:$@\;1; fi) ; exit $$RC) @@ -422,7 +421,6 @@ gb_Library_PLAINLIBS_NONE += \ shlwapi \ user32 \ uuid \ - uwinapi \ version \ wininet \ winmm \ @@ -465,7 +463,7 @@ gb_Library_DLLFILENAMES :=\ define gb_Library_Library_platform $(call gb_LinkTarget_set_dlltarget,$(2),$(3)) -$(call gb_LinkTarget_set_auxtargets,$(2),\ +$(call gb_LinkTarget_add_auxtargets,$(2),\ $(patsubst %.lib,%.exp,$(call gb_LinkTarget_get_target,$(2))) \ $(3).manifest \ $(call gb_LinkTarget_get_pdbfile,$(2)) \ @@ -536,7 +534,7 @@ define gb_StaticLibrary_StaticLibrary_platform $(call gb_LinkTarget_get_target,$(2)) \ $(call gb_LinkTarget_get_headers_target,$(2)) : PDBFILE = $(call gb_LinkTarget_get_pdbfile,$(2)) -$(call gb_LinkTarget_set_auxtargets,$(2),\ +$(call gb_LinkTarget_add_auxtargets,$(2),\ $(call gb_LinkTarget_get_pdbfile,$(2)) \ ) @@ -550,7 +548,7 @@ gb_Executable_TARGETTYPEFLAGS := $(gb_Windows_PE_TARGETTYPEFLAGS) gb_Executable_get_rpath := define gb_Executable_Executable_platform -$(call gb_LinkTarget_set_auxtargets,$(2),\ +$(call gb_LinkTarget_add_auxtargets,$(2),\ $(patsubst %.exe,%.pdb,$(call gb_LinkTarget_get_target,$(2))) \ $(call gb_LinkTarget_get_pdbfile,$(2)) \ $(call gb_LinkTarget_get_target,$(2)).manifest \ @@ -584,7 +582,7 @@ gb_CppunitTest_get_libfilename = test_$(1).dll define gb_CppunitTest_CppunitTest_platform $(call gb_LinkTarget_set_dlltarget,$(2),$(3)) -$(call gb_LinkTarget_set_auxtargets,$(2),\ +$(call gb_LinkTarget_add_auxtargets,$(2),\ $(patsubst %.lib,%.exp,$(call gb_LinkTarget_get_target,$(2))) \ $(3).manifest \ $(patsubst %.dll,%.pdb,$(3)) \ diff --git a/solenv/gbuild/platform/com_GCC_class.mk b/solenv/gbuild/platform/com_GCC_class.mk index 61afbc18e8e8..da909489baaf 100644 --- a/solenv/gbuild/platform/com_GCC_class.mk +++ b/solenv/gbuild/platform/com_GCC_class.mk @@ -25,7 +25,7 @@ # $(call gb_CObject__command,object,relative-source,source,dep-file) define gb_CObject__command -$(call gb_Output_announce,$(2),$(true),C ,3) +$(call gb_Output_announce,$(2).c,$(true),C ,3) $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $(1)) $(dir $(4)) && \ $(gb_CC) \ @@ -44,7 +44,7 @@ endef # $(call gb_CxxObject__command,object,relative-source,source,dep-file) define gb_CxxObject__command -$(call gb_Output_announce,$(2),$(true),CXX,3) +$(call gb_Output_announce,$(2).cxx,$(true),CXX,3) $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $(1)) $(dir $(4)) && \ $(gb_CXX) \ diff --git a/solenv/gbuild/platform/macosx.mk b/solenv/gbuild/platform/macosx.mk index 5be5001f22fd..ef82a823a8a8 100644 --- a/solenv/gbuild/platform/macosx.mk +++ b/solenv/gbuild/platform/macosx.mk @@ -55,9 +55,9 @@ gb_COMPILERDEFS += \ gb_CFLAGS := \ -isysroot $(gb_SDKDIR) \ $(gb_CFLAGS_COMMON) \ - -Wshadow \ -fPIC \ -fno-strict-aliasing \ + #-Wshadow \ break in compiler headers already gb_CXXFLAGS := \ -isysroot $(gb_SDKDIR) \ @@ -149,9 +149,10 @@ gb_LinkTarget__RPATHS := \ SDKBIN: \ NONE:@__VIA_LIBRARY_PATH__@ \ +# $(call gb_LinkTarget__get_installname,libfilename,soversion,layerprefix) define gb_LinkTarget__get_installname -$(if $(2),-install_name '$(2)$(1)',$(error - cannot determine -install_name for $(2))) +$(if $(3),-install_name '$(3)$(1)$(if $(2),.$(2))', + $(call gb_Output_error,cannot determine -install_name for $(3))) endef gb_LinkTarget_CFLAGS := $(gb_CFLAGS) $(gb_CFLAGS_WERROR) @@ -207,13 +208,14 @@ $(call gb_Helper_abbreviate_dirs,\ $(foreach extraobjectlist,$(EXTRAOBJECTLISTS),`cat $(extraobjectlist)`) \ $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) \ $(LIBS) \ - -o $(1) \ + -o $(if $(SOVERSION),$(1).$(SOVERSION),$(1)) \ `cat $${DYLIB_FILE}` && \ + $(if $(SOVERSION),ln -sf $(notdir $(1)).$(SOVERSION) $(1),:) && \ $(if $(filter Executable,$(TARGETTYPE)), \ $(PERL) $(SOLARENV)/bin/macosx-change-install-names.pl Executable \ $(LAYER) $(1) &&) \ $(if $(filter Library CppunitTest,$(TARGETTYPE)),\ - $(PERL) $(SOLARENV)/bin/macosx-change-install-names.pl Library $(LAYER) $(1) && \ + $(PERL) $(SOLARENV)/bin/macosx-change-install-names.pl Library $(LAYER) $(if $(SOVERSION),$(1).$(SOVERSION),$(1)) && \ ln -sf $(1) $(patsubst %.dylib,%.jnilib,$(1)) &&) \ rm -f $${DYLIB_FILE}) endef @@ -289,15 +291,19 @@ gb_Library_LAYER := \ $(foreach lib,$(gb_Library_UNOVERLIBS),$(lib):URELIB) \ define gb_Library_get_rpath -$(call gb_LinkTarget__get_installname,$(call gb_Library_get_filename,$(1)),$(call gb_LinkTarget__get_rpath_for_layer,$(call gb_Library_get_layer,$(1)))) +$(call gb_LinkTarget__get_installname,$(call gb_Library_get_filename,$(1)),$(2),$(call gb_LinkTarget__get_rpath_for_layer,$(call gb_Library_get_layer,$(1)))) endef +# RPATH def is delayed until the link command to get current value of SOVERSION define gb_Library_Library_platform -$(call gb_LinkTarget_get_target,$(2)) : RPATH := $(call gb_Library_get_rpath,$(1)) +$(call gb_LinkTarget_get_target,$(2)) : \ + RPATH = $$(call gb_Library_get_rpath,$(1),$$(SOVERSION)) $(call gb_LinkTarget_get_target,$(2)) : LAYER := $(call gb_Library_get_layer,$(1)) endef +gb_Library__set_soversion_script_platform = $(gb_Library__set_soversion_script) + # StaticLibrary class @@ -336,7 +342,12 @@ endef # CppunitTest class +ifeq ($(CROSS_COMPILING),YES) +gb_CppunitTest_CPPTESTPRECOMMAND := : +else gb_CppunitTest_CPPTESTPRECOMMAND := $(gb_Helper_set_ld_path) +endif + gb_CppunitTest_SYSPRE := libtest_ gb_CppunitTest_EXT := .dylib gb_CppunitTest_LIBDIR := $(gb_Helper_OUTDIRLIBDIR) diff --git a/solenv/gbuild/platform/solaris.mk b/solenv/gbuild/platform/solaris.mk index a51edbfb63ed..afb96297a615 100644 --- a/solenv/gbuild/platform/solaris.mk +++ b/solenv/gbuild/platform/solaris.mk @@ -26,6 +26,12 @@ # #************************************************************************* +# FIXME: this is currently hardcoded to SunStudio. +# We really don't want to support building with that because of all its +# bugs that need painful work-arounds; if somebody revives the Solaris +# port then please make it use GCC instead (there used to be a Solaris/GCC +# port at some point in the past, see solenv/inc/unxsog{i,s}.mk). + GUI := UNX COM := C52 @@ -154,7 +160,7 @@ gb_Helper_OUTDIRLIBDIR := $(OUTDIR)/lib # CObject class define gb_CObject__command -$(call gb_Output_announce,$(2),$(true),C ,3) +$(call gb_Output_announce,$(2).c,$(true),C ,3) $(call gb_Helper_abbreviate_dirs,\ rm -f $(4) && \ mkdir -p $(dir $(1)) $(dir $(4)) && \ @@ -173,7 +179,7 @@ endef # CxxObject class define gb_CxxObject__command -$(call gb_Output_announce,$(2),$(true),CXX,3) +$(call gb_Output_announce,$(2).cxx,$(true),CXX,3) $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $(1)) $(dir $(4)) && \ $(gb_CXX) \ @@ -213,6 +219,7 @@ $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $(1)) && \ $(gb_CXX) \ $(if $(filter Library CppunitTest,$(TARGETTYPE)),$(gb_Library_TARGETTYPEFLAGS)) \ + $(if $(SOVERSIONSCRIPT),-M $(SOVERSIONSCRIPT)) \ $(subst \d,$$,$(RPATH)) \ $(T_LDFLAGS) \ $(patsubst lib%.so,-l%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib)))) \ @@ -223,7 +230,8 @@ $(call gb_Helper_abbreviate_dirs,\ $(foreach extraobjectlist,$(EXTRAOBJECTLISTS),@$(extraobjectlist)) \ $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) \ $(LIBS) \ - -o $(1)) + -o $(if $(SOVERSION),$(1).$(SOVERSION),$(1))) + $(if $(SOVERSION),ln -sf $(notdir $(1)).$(SOVERSION) $(1)) endef define gb_LinkTarget__command_staticlink diff --git a/solenv/gbuild/platform/unxgcc.mk b/solenv/gbuild/platform/unxgcc.mk index 37c203f32c81..a22d23410496 100644 --- a/solenv/gbuild/platform/unxgcc.mk +++ b/solenv/gbuild/platform/unxgcc.mk @@ -161,10 +161,7 @@ gb_COMPILEROPTFLAGS := $(gb_COMPILERDEFAULTOPTFLAGS) gb_LINKEROPTFLAGS := -Wl,-O1 endif -gb_DEBUG_CFLAGS := -ggdb3 -finline-limit=0 -fno-inline -fno-default-inline -ifeq ($(HAVE_GCC_DWARF_4),TRUE) -gb_DEBUG_CFLAGS += -gdwarf-4 -endif +gb_DEBUG_CFLAGS := -ggdb2 -finline-limit=0 -fno-inline -fno-default-inline gb_COMPILERNOOPTFLAGS := -O0 @@ -209,10 +206,6 @@ gb_LinkTarget_CXXFLAGS := $(gb_CXXFLAGS) $(gb_CXXFLAGS_WERROR) ifeq ($(gb_SYMBOL),$(true)) gb_LinkTarget_CXXFLAGS += -ggdb2 gb_LinkTarget_CFLAGS += -ggdb2 -ifeq ($(HAVE_GCC_DWARF_4),TRUE) -gb_LinkTarget_CXXFLAGS += -gdwarf-4 -gb_LinkTarget_CFLAGS += -gdwarf-4 -endif endif # note that `cat $(extraobjectlist)` is needed to build with older gcc versions, e.g. 4.1.2 on SLED10 @@ -223,6 +216,8 @@ $(call gb_Helper_abbreviate_dirs,\ $(gb_CXX) \ $(if $(filter Library CppunitTest,$(TARGETTYPE)),$(gb_Library_TARGETTYPEFLAGS)) \ $(if $(filter Library,$(TARGETTYPE)),$(gb_Library_LTOFLAGS)) \ + $(if $(SOVERSION),-Wl$(COMMA)--soname=$(notdir $(1)).$(SOVERSION)) \ + $(if $(SOVERSIONSCRIPT),-Wl$(COMMA)--version-script=$(SOVERSIONSCRIPT))\ $(subst \d,$$,$(RPATH)) \ $(T_LDFLAGS) \ $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ @@ -234,7 +229,8 @@ $(call gb_Helper_abbreviate_dirs,\ -Wl$(COMMA)--start-group $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) -Wl$(COMMA)--end-group \ $(LIBS) \ $(patsubst lib%.a,-l%,$(patsubst lib%.so,-l%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib))))) \ - -o $(1)) + -o $(if $(SOVERSION),$(1).$(SOVERSION),$(1))) + $(if $(SOVERSION),ln -sf $(notdir $(1)).$(SOVERSION) $(1)) endef define gb_LinkTarget__command_staticlink @@ -317,6 +313,8 @@ $(call gb_LinkTarget_get_target,$(2)) : RPATH := $(call gb_Library_get_rpath,$(1 endef +gb_Library__set_soversion_script_platform = $(gb_Library__set_soversion_script) + # StaticLibrary class diff --git a/solenv/gbuild/platform/unxgcc_gdbforjunit.sh b/solenv/gbuild/platform/unxgcc_gdbforjunit.sh index 730d2e9484f7..0341e7b7a592 100755 --- a/solenv/gbuild/platform/unxgcc_gdbforjunit.sh +++ b/solenv/gbuild/platform/unxgcc_gdbforjunit.sh @@ -44,7 +44,7 @@ then echo "Found a core dump at ${COREFILE}" echo "Stacktrace:" GDBCOMMANDFILE=`mktemp` - echo "bt" > ${GDBCOMMANDFILE} + echo "thread apply all bt" > ${GDBCOMMANDFILE} gdb -x $GDBCOMMANDFILE --batch ${OFFICEFILE}.bin ${COREFILE} rm ${GDBCOMMANDFILE} echo diff --git a/solenv/inc/settings.mk b/solenv/inc/settings.mk index 3b9b260dbcc0..6dddac6799b8 100644 --- a/solenv/inc/settings.mk +++ b/solenv/inc/settings.mk @@ -452,7 +452,6 @@ DBG_LEVEL*=0 optimize!=true dbgutil!=true DBG_LEVEL*=1 -USE_DEBUG_RUNTIME*=TRUE .ENDIF .IF "$(debug)"!="" diff --git a/solenv/inc/unxandr/lo-bootstrap.h b/solenv/inc/unxandr/lo-bootstrap.h index 258d9d28850c..71a8d13a6e10 100644 --- a/solenv/inc/unxandr/lo-bootstrap.h +++ b/solenv/inc/unxandr/lo-bootstrap.h @@ -31,11 +31,14 @@ #include <jni.h> #include <dlfcn.h> +#include <dirent.h> #ifdef __cplusplus extern "C" { #endif +typedef struct lo_apk_dir lo_apk_dir; + char **lo_dlneeds(const char *library); void *lo_dlopen(const char *library); @@ -49,6 +52,12 @@ int lo_dladdr(void *addr, void *lo_apkentry(const char *filename, size_t *size); +lo_apk_dir *lo_apk_opendir(const char *dirname); + +struct dirent *lo_apk_readdir(lo_apk_dir *dirp); + +int lo_apk_closedir(lo_apk_dir *dirp); + int lo_dlcall_argc_argv(void *function, int argc, const char **argv); |