diff options
Diffstat (limited to 'solenv')
27 files changed, 670 insertions, 134 deletions
diff --git a/solenv/bin/checkdll.sh b/solenv/bin/checkdll.sh index 42a6725750a4..aa281af5d353 100755 --- a/solenv/bin/checkdll.sh +++ b/solenv/bin/checkdll.sh @@ -42,7 +42,7 @@ if [ -x $checkdll ]; then -L) shift; option=$1;; --) break;; esac - case "${libpath+X}" in + case "${libpath:+X}" in X) libpath=$libpath:$option;; *) libpath=$option;; esac diff --git a/solenv/bin/macosx-change-install-names.pl b/solenv/bin/macosx-change-install-names.pl index 52b2ffa343ec..7ac07d9f88b0 100644 --- a/solenv/bin/macosx-change-install-names.pl +++ b/solenv/bin/macosx-change-install-names.pl @@ -43,6 +43,7 @@ sub action($$$) 'shl/URELIB/URELIB' => '@loader_path', 'shl/OOO/URELIB' => '@loader_path/../ure-link/lib', 'shl/OOO/OOO' => '@loader_path', + 'shl/LOADER/LOADER' => '@loader_path', 'shl/OXT/URELIB' => '@executable_path/urelibs', 'shl/BOXT/URELIB' => '@executable_path/urelibs', 'shl/BOXT/OOO' => '@loader_path/../../../basis-link/program', @@ -57,7 +58,7 @@ sub action($$$) } @ARGV == 3 || @ARGV >= 2 && $ARGV[0] eq "extshl" or die - 'Usage: app|shl|extshl UREBIN|URELIB|OOO|SDK|BRAND|OXT|BOXT|NONE <filepath>*'; + 'Usage: app|shl|extshl UREBIN|URELIB|OOO|SDK|BRAND|OXT|BOXT|NONE|LOADER <filepath>*'; $type = shift @ARGV; $loc = shift @ARGV; if ($type eq "SharedLibrary") @@ -85,10 +86,21 @@ if ($type eq "extshl") $change .= " -change $1 " . action($type, $loc, $loc) . "/$2"; $inames{$file} = $2; } - foreach $file (@ARGV) + if( $loc eq "LOADER" ) { - my $call = "install_name_tool$change -id \@__________________________________________________$loc/$inames{$file} $file"; - system($call) == 0 or die "cannot $call"; + foreach $file (@ARGV) + { + my $call = "install_name_tool$change -id \@loader_path/$inames{$file} $file"; + system($call) == 0 or die "cannot $call"; + } + } + else + { + foreach $file (@ARGV) + { + my $call = "install_name_tool$change -id \@__________________________________________________$loc/$inames{$file} $file"; + system($call) == 0 or die "cannot $call"; + } } } foreach $file (@ARGV) diff --git a/solenv/bin/modules/installer/globals.pm b/solenv/bin/modules/installer/globals.pm index 2f7249c24f47..ace634a3ac5e 100644 --- a/solenv/bin/modules/installer/globals.pm +++ b/solenv/bin/modules/installer/globals.pm @@ -94,7 +94,8 @@ BEGIN "fur", "ny", "so", - "kab" + "kab", + "tk" ); @items_at_modules = ("Files", "Dirs", "Unixlinks"); @asianlanguages = ("ja", "ko", "zh-CN", "zh-TW"); @@ -385,6 +386,10 @@ BEGIN %allcomponents_in_this_database = (); %allshortcomponents = (); %alluniquedirectorynames = (); + %allregistrycomponents_ = (); + %allregistrycomponents_in_this_database_ = (); + %allshortregistrycomponents = (); + %allregistryidentifier = (); $installlocationdirectory = ""; $installlocationdirectoryset = 0; diff --git a/solenv/bin/modules/installer/parameter.pm b/solenv/bin/modules/installer/parameter.pm index 8c844d55609c..9c5ec8c24394 100644 --- a/solenv/bin/modules/installer/parameter.pm +++ b/solenv/bin/modules/installer/parameter.pm @@ -397,7 +397,6 @@ sub setglobalvariables if ($installer::globals::unpackpath eq "") # unpackpath not set { $installer::globals::unpackpath = cwd(); - if ( $installer::globals::iswin ) { $installer::globals::unpackpath =~ s/\//\\/g; } } if ( $installer::globals::localunpackdir ne "" ) { $installer::globals::unpackpath = $installer::globals::localunpackdir; } diff --git a/solenv/bin/modules/installer/systemactions.pm b/solenv/bin/modules/installer/systemactions.pm index b96b1268a716..09b4cb1882a3 100644 --- a/solenv/bin/modules/installer/systemactions.pm +++ b/solenv/bin/modules/installer/systemactions.pm @@ -859,7 +859,7 @@ sub find_file_with_file_extension push(@installer::globals::logfileinfo, $infoline); opendir(DIR, $dir); - @sourcefiles = readdir(DIR); + @sourcefiles = sort readdir(DIR); closedir(DIR); my $onefile; diff --git a/solenv/bin/modules/installer/windows/file.pm b/solenv/bin/modules/installer/windows/file.pm index 059c394278d6..c4315b43aceb 100644 --- a/solenv/bin/modules/installer/windows/file.pm +++ b/solenv/bin/modules/installer/windows/file.pm @@ -282,7 +282,7 @@ sub get_file_component_name } else { - if ( length($componentname) > 72 ) + if ( length($componentname) > 60 ) { # Using md5sum needs much time # chomp(my $shorter = `echo $componentname | md5sum | sed -e "s/ .*//g"`); @@ -674,7 +674,15 @@ sub get_language_for_file if ( $fileref->{'specificlanguage'} ) { $language = $fileref->{'specificlanguage'}; } - if (!($language eq "")) + if ( $language eq "" ) + { + $language = 0; # language independent + # If this is not a font, the return value should be "0" (Check ICE 60) + my $styles = ""; + if ( $fileref->{'Styles'} ) { $styles = $fileref->{'Styles'}; } + if ( $styles =~ /\bFONT\b/ ) { $language = ""; } + } + else { $language = installer::windows::language::get_windows_language($language); } diff --git a/solenv/bin/modules/installer/windows/idtglobal.pm b/solenv/bin/modules/installer/windows/idtglobal.pm index 333df0e8ea08..94b5dcc62399 100644 --- a/solenv/bin/modules/installer/windows/idtglobal.pm +++ b/solenv/bin/modules/installer/windows/idtglobal.pm @@ -49,11 +49,14 @@ sub shorten_feature_gid my ($stringref) = @_; $$stringref =~ s/gid_Module_/gm_/; + $$stringref =~ s/_Extension_/_ex_/; $$stringref =~ s/_Root_/_r_/; $$stringref =~ s/_Prg_/_p_/; $$stringref =~ s/_Optional_/_o_/; + $$stringref =~ s/_Tools_/_tl_/; $$stringref =~ s/_Wrt_Flt_/_w_f_/; $$stringref =~ s/_Javafilter_/_jf_/; + $$stringref =~ s/_Productivity_/_pr_/; } ############################################ diff --git a/solenv/bin/modules/installer/windows/msp.pm b/solenv/bin/modules/installer/windows/msp.pm index 85945a05499d..7593c96a6ea8 100644 --- a/solenv/bin/modules/installer/windows/msp.pm +++ b/solenv/bin/modules/installer/windows/msp.pm @@ -27,6 +27,7 @@ package installer::windows::msp; +use File::Copy; use installer::control; use installer::converter; use installer::exiter; @@ -85,6 +86,196 @@ sub install_installation_sets } ################################################################################# +# Collecting the destinations of all files with flag PATCH in a hash. +################################################################################# + +sub collect_patch_file_destinations +{ + my ( $filesarray ) = @_; + + my %patchfiledestinations = (); + my %nopatchfiledestinations = (); + my $patchcounter = 0; + my $nopatchcounter = 0; + + for ( my $i = 0; $i <= $#{$filesarray}; $i++ ) + { + my $onefile = ${$filesarray}[$i]; + my $styles = ""; + + if ( $onefile->{'Styles'} ) { $styles = $onefile->{'Styles'} }; + + if ( $styles =~ /\bPATCH\b/ ) + { + $patchfiledestinations{$onefile->{'destination'}} = 1; + $patchcounter++; + } + else + { + $nopatchfiledestinations{$onefile->{'destination'}} = 1; + $nopatchcounter++; + } + } + + return (\%patchfiledestinations, \%nopatchfiledestinations, $patchcounter, $nopatchcounter); +} + +################################################################################# +# Returning the first path segment of a path +################################################################################# + +sub get_first_path_segment +{ + my ( $path ) = @_; + + my $firstsegment = ""; + my $remainder = $path; + + if ( $path =~ /^\s*(.*?)[\/\\](.*)\s*$/ ) + { + $firstsegment = $1; + $remainder = $2; + } + + return ($firstsegment, $remainder); +} + +################################################################################# +# Finding the flexible path in the destinations, that are saved in +# the hash $nopatchfiledestinations. +################################################################################# + +sub prepare_path_in_nopatchfilehash +{ + my ($nopatchfiledestinations, $newpath) = @_; + + my $infoline = ""; + my $flexiblepath = ""; + my $found = 0; + my %checked_destinations = (); + + foreach my $onedestination ( keys %{$nopatchfiledestinations} ) + { + $flexiblepath = ""; + $found = 0; + + my $found_first_segement = 1; + my $firstsegement = ""; + my $fixedpath = $onedestination; + my $testfile = $newpath . $installer::globals::separator . $fixedpath; + + while (( ! -f $testfile ) && ( $found_first_segement )) + { + $firstsegement = ""; + ( $firstsegement, $fixedpath ) = get_first_path_segment($fixedpath); + + if ( $firstsegement ne "" ) + { + $found_first_segement = 1; + $flexiblepath = $flexiblepath . $firstsegement . $installer::globals::separator; + } + else + { + $found_first_segement = 0; + } + + $testfile = $newpath . $installer::globals::separator . $fixedpath; + } + + if ( -f $testfile ) { $found = 1; } + + if ( $found ) { last; } + } + + if ( ! $found ) { installer::exiter::exit_program("ERROR: Could not determine flexible destination path for msp patch creation!", "prepare_path_in_nopatchfilehash"); } + + $infoline = "Setting flexible path for msp creation: $flexiblepath\n"; + push( @installer::globals::logfileinfo, $infoline); + + foreach my $onedestination ( keys %{$nopatchfiledestinations} ) + { + $onedestination =~ s/^\s*\Q$flexiblepath\E//; + $checked_destinations{$onedestination} = 1; + } + + return \%checked_destinations; +} + +################################################################################# +# Synchronizing the two installed products in that way, that only +# files with flag PATCH are different. +################################################################################# + +sub synchronize_installation_sets +{ + my ($olddatabase, $newdatabase, $filesarray) = @_; + + my $infoline = "\nSynchronizing installed products because of PATCH flag\n"; + push( @installer::globals::logfileinfo, $infoline); + $infoline = "Old product: $olddatabase\n"; + push( @installer::globals::logfileinfo, $infoline); + $infoline = "New product: $newdatabase\n"; + push( @installer::globals::logfileinfo, $infoline); + + my ( $patchfiledestinations, $nopatchfiledestinations, $patchfilecounter, $nopatchfilecounter ) = collect_patch_file_destinations($filesarray); + + $infoline = "Number of files with PATCH flag: $patchfilecounter\n"; + push( @installer::globals::logfileinfo, $infoline); + + $infoline = "Number of files without PATCH flag: $nopatchfilecounter\n"; + push( @installer::globals::logfileinfo, $infoline); + + foreach my $localfile ( sort keys %{$patchfiledestinations} ) + { + $infoline = "\tPATCH file: $localfile\n"; + push( @installer::globals::logfileinfo, $infoline); + } + + my $oldpath = $olddatabase; + if ( $^O =~ /cygwin/i ) { $oldpath =~ s/\\/\//g; } + installer::pathanalyzer::get_path_from_fullqualifiedname(\$oldpath); + $oldpath =~ s/\\\s*$//; + $oldpath =~ s/\/\s*$//; + + my $newpath = $newdatabase; + if ( $^O =~ /cygwin/i ) { $newpath =~ s/\\/\//g; } + installer::pathanalyzer::get_path_from_fullqualifiedname(\$newpath); + $newpath =~ s/\\\s*$//; + $newpath =~ s/\/\s*$//; + + # The destination path is not correct. destinations in the hash contain + # the flexible installation path, that is not part in the administrative installation + $nopatchfiledestinations = prepare_path_in_nopatchfilehash($nopatchfiledestinations, $newpath); + + foreach my $onedestination ( keys %{$nopatchfiledestinations} ) + { + my $source = $oldpath . $installer::globals::separator . $onedestination; + my $dest = $newpath . $installer::globals::separator . $onedestination; + + if ( -f $source ) + { + if ( -f $dest ) + { + my $copyreturn = copy($source, $dest); + # installer::systemactions::copy_one_file($source, $dest); + # $infoline = "Synchronizing file: $source to $dest\n"; + # push( @installer::globals::logfileinfo, $infoline); + } + else + { + $infoline = "Not synchronizing. Destination file \"$dest\" does not exist.\n"; + push( @installer::globals::logfileinfo, $infoline); + } + } + else + { + $infoline = "Not synchronizing. Source file \"$source\" does not exist.\n"; + push( @installer::globals::logfileinfo, $infoline); + } + } +} + +################################################################################# # Extracting all tables from a pcp file ################################################################################# @@ -1197,6 +1388,12 @@ sub create_msp_patch installer::logger::print_message( "... installing products ...\n" ); my ($olddatabase, $newdatabase) = install_installation_sets($installationdir); + installer::logger::include_timestamp_into_logfile("\nPerformance Info: Starting synchronization of installation sets"); + + # Synchronizing installed products, allowing only different files with PATCH flag + installer::logger::print_message( "... synchronizing installation sets ...\n" ); + synchronize_installation_sets($olddatabase, $newdatabase, $filesarray); + installer::logger::include_timestamp_into_logfile("\nPerformance Info: Starting pcp file creation"); # Create pcp file diff --git a/solenv/bin/modules/installer/windows/property.pm b/solenv/bin/modules/installer/windows/property.pm index 29e8b4d57b00..5cfa674dd7c0 100644 --- a/solenv/bin/modules/installer/windows/property.pm +++ b/solenv/bin/modules/installer/windows/property.pm @@ -307,6 +307,12 @@ sub set_important_properties push(@{$propertyfile}, $onepropertyline); } + if ( $allvariables->{'EXCLUDE_FROM_REBASE'} ) + { + my $onepropertyline = "EXCLUDE_FROM_REBASE" . "\t" . $allvariables->{'EXCLUDE_FROM_REBASE'} . "\n"; + push(@{$propertyfile}, $onepropertyline); + } + if ( $allvariables->{'PREREQUIREDPATCH'} ) { my $onepropertyline = "PREREQUIREDPATCH" . "\t" . $allvariables->{'PREREQUIREDPATCH'} . "\n"; diff --git a/solenv/bin/modules/installer/windows/registry.pm b/solenv/bin/modules/installer/windows/registry.pm index bc907d704f50..ad036865ebc3 100644 --- a/solenv/bin/modules/installer/windows/registry.pm +++ b/solenv/bin/modules/installer/windows/registry.pm @@ -61,12 +61,13 @@ sub get_registry_component_name # Attention: Maximum length for the componentname is 72 + # identifying this component as registryitem component + $componentname = "registry_" . $componentname; + $componentname =~ s/gid_module_/g_m_/g; $componentname =~ s/_optional_/_o_/g; $componentname =~ s/_javafilter_/_jf_/g; - $componentname = $componentname . "_registry"; # identifying this component as registryitem component - # This componentname must be more specific my $addon = "_"; if ( $allvariables->{'PRODUCTNAME'} ) { $addon = $addon . $allvariables->{'PRODUCTNAME'}; } @@ -96,11 +97,74 @@ sub get_registry_component_name elsif (( $styles =~ /\bHELPPACK\b/ ) && ( $installer::globals::helppack )) { $componentname = $componentname . "_help"; } if ( $styles =~ /\bALWAYS_REQUIRED\b/ ) { $componentname = $componentname . "_forced"; } + # Attention: Maximum length for the componentname is 72 + # %installer::globals::allregistrycomponents_in_this_database_ : resetted for each database + # %installer::globals::allregistrycomponents_ : not resetted for each database + # Component strings must be unique for the complete product, because they are used for + # the creation of the globally unique identifier. + + my $fullname = $componentname; # This can be longer than 72 + + if (( exists($installer::globals::allregistrycomponents_{$fullname}) ) && ( ! exists($installer::globals::allregistrycomponents_in_this_database_{$fullname}) )) + { + # This is not allowed: One component cannot be installed with different packages. + installer::exiter::exit_program("ERROR: Windows registry component \"$fullname\" is already included into another package. This is not allowed.", "get_registry_component_name"); + } + + if ( exists($installer::globals::allregistrycomponents_{$fullname}) ) + { + $componentname = $installer::globals::allregistrycomponents_{$fullname}; + } + else + { + if ( length($componentname) > 60 ) + { + $componentname = generate_new_short_registrycomponentname($componentname); # This has to be unique for the complete product, not only one package + } + + $installer::globals::allregistrycomponents_{$fullname} = $componentname; + $installer::globals::allregistrycomponents_in_this_database_{$fullname} = 1; + } + if ( $isrootmodule ) { $installer::globals::registryrootcomponent = $componentname; } return $componentname; } +######################################################### +# Create a shorter version of a long component name, +# because maximum length in msi database is 72. +# Attention: In multi msi installation sets, the short +# names have to be unique over all packages, because +# this string is used to create the globally unique id +# -> no resetting of +# %installer::globals::allshortregistrycomponents +# after a package was created. +######################################################### + +sub generate_new_short_registrycomponentname +{ + my ($componentname) = @_; + + my $shortcomponentname = ""; + my $counter = 1; + + my $startversion = substr($componentname, 0, 60); # taking only the first 60 characters + $startversion = $startversion . "_"; + + $shortcomponentname = $startversion . $counter; + + while ( exists($installer::globals::allshortregistrycomponents{$shortcomponentname}) ) + { + $counter++; + $shortcomponentname = $startversion . $counter; + } + + $installer::globals::allshortregistrycomponents{$shortcomponentname} = 1; + + return $shortcomponentname; +} + ############################################################## # Returning identifier for registry table. ############################################################## @@ -122,8 +186,16 @@ sub get_registry_identifier $identifier =~ s/_clsid_/_c_/; $identifier =~ s/_currentversion_/_cv_/; $identifier =~ s/_microsoft_/_ms_/; + $identifier =~ s/_manufacturer_/_mf_/; + $identifier =~ s/_productname_/_pn_/; + $identifier =~ s/_productversion_/_pv_/; $identifier =~ s/_staroffice_/_so_/; + $identifier =~ s/_software_/_sw_/; + $identifier =~ s/_capabilities_/_cap_/; $identifier =~ s/_classpath_/_cp_/; + $identifier =~ s/_extension_/_ex_/; + $identifier =~ s/_fileassociations_/_fa_/; + $identifier =~ s/_propertysheethandlers_/_psh_/; $identifier =~ s/__/_/g; # Saving this in the registry collector diff --git a/solenv/bin/modules/installer/worker.pm b/solenv/bin/modules/installer/worker.pm index c50813f4ee27..ad4ac9d47de8 100644 --- a/solenv/bin/modules/installer/worker.pm +++ b/solenv/bin/modules/installer/worker.pm @@ -547,7 +547,7 @@ sub clean_jds_temp_dirs ########################################################### # Setting one language in the language independent -# array of include pathes with $(LANG) +# array of include paths with $(LANG) ########################################################### sub get_language_specific_include_pathes @@ -2314,7 +2314,7 @@ sub add_variables_from_inc_to_hashref } ############################################## -# Collecting all files from include pathes +# Collecting all files from include paths ############################################## sub collect_all_files_from_includepathes @@ -2322,7 +2322,7 @@ sub collect_all_files_from_includepathes my ($patharrayref) = @_; installer::logger::globallog("Reading all directories: Start"); - installer::logger::print_message( "... reading include pathes ...\n" ); + installer::logger::print_message( "... reading include paths ...\n" ); # empty the global @installer::globals::allincludepathes =(); diff --git a/solenv/bin/ooinstall b/solenv/bin/ooinstall index b080598c91ed..c4f44b4d713b 100755 --- a/solenv/bin/ooinstall +++ b/solenv/bin/ooinstall @@ -13,7 +13,13 @@ use Cwd; $path = ''; $do_link = 0; +$is_windows = 0; my $tmp_dir; + +if ($ENV{GUI} eq 'WNT') { + $is_windows = 1; +} + if( defined($ENV{TMPDIR}) ) { $tmp_dir = $ENV{TMPDIR}; } elsif( defined($ENV{TMP}) ) { @@ -87,9 +93,9 @@ else { $langs = join (",", @larr); $destdir=''; -if ( defined $ENV{OODESTDIR} && - $ENV{OODESTDIR} ne "" ) { - $destdir = "-destdir \"$ENV{OODESTDIR}\""; +if ( defined $ENV{DESTDIR} && + $ENV{DESTDIR} ne "" ) { + $destdir = "-destdir \"$ENV{DESTDIR}\""; } $strip=''; @@ -98,12 +104,18 @@ if ( defined $ENV{DISABLE_STRIP} && $strip = "-dontstrip"; } -print "Running OOo installer\n"; +$msi=''; +if ($is_windows) { + $msi = "-msitemplate $ENV{SRC_ROOT}/instsetoo_native/$ENV{INPATH}/misc/openoffice/msi_templates " . + "-msilanguage $ENV{SRC_ROOT}/instsetoo_native/$ENV{INPATH}/misc/win_ulffiles"; +} + +print "Running LibreOffice installer\n"; system ("cd $ENV{SRC_ROOT}/instsetoo_native/util ; " . "perl -w $ENV{SOLARENV}/bin/make_installer.pl " . "-f openoffice.lst -l $langs -p LibreOffice " . "-u $tmp_dir " . - "-buildid $BUILD $destdir $strip " . + "-buildid $BUILD $destdir $strip $msi " . "-simple $path") && die "Failed to install: $!"; if ($ENV{BUILD_TYPE} =~ m/ODK/) { @@ -112,11 +124,11 @@ if ($ENV{BUILD_TYPE} =~ m/ODK/) { "perl -w $ENV{SOLARENV}/bin/make_installer.pl " . "-f openoffice.lst -l en-US -p LibreOffice_SDK " . "-u $tmp_dir " . - "-buildid $BUILD $destdir $strip " . + "-buildid $BUILD $destdir $strip $msi" . "-simple $path") && die "Failed to install: $!"; } print "Installer finished\n"; -if ($do_link) { +if ($do_link && !$is_windows) { `$ENV{SOLARENV}/bin/linkoo $path $ENV{SRC_ROOT}`; } diff --git a/solenv/gbuild/ComponentTarget.mk b/solenv/gbuild/ComponentTarget.mk index 504bd5a64930..7b76fd39df84 100644 --- a/solenv/gbuild/ComponentTarget.mk +++ b/solenv/gbuild/ComponentTarget.mk @@ -53,16 +53,16 @@ endef $(foreach repo,$(gb_ComponentTarget_REPOS),$(eval $(call gb_ComponentTarget__rules,$(repo)))) $(call gb_ComponentTarget_get_target,%) : - $(eval $(call gb_Outpt_error,Unable to find component file $(call gb_ComponentTarget_get_source,,$*) in the repositories: $(gb_ComponentTarget_REPOS) or xlstproc is missing.)) + $(eval $(call gb_Outpt_error,Unable to find component file $(call gb_ComponentTarget_get_source,,$*) in the repositories: $(gb_ComponentTarget_REPOS) or xsltproc is missing.)) $(call gb_ComponentTarget_get_external_target,%) : $(call gb_Deliver_deliver,$<,$@) define gb_ComponentTarget_ComponentTarget -$(call gb_ComponentTarget_get_target,$(1)) : LIBFILENAME := $(3) -$(call gb_ComponentTarget_get_target,$(1)) : COMPONENTPREFIX := $(2) -$(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))) +$(call gb_ComponentTarget_get_target,$(4)) : LIBFILENAME := $(3) +$(call gb_ComponentTarget_get_target,$(4)) : COMPONENTPREFIX := $(2) +$(call gb_ComponentTarget_get_outdir_target,$(1)) : $(call gb_ComponentTarget_get_target,$(4)) +$(call gb_Deliver_add_deliverable,$(call gb_ComponentTarget_get_outdir_target,$(1)),$(call gb_ComponentTarget_get_target,$(4))) endef diff --git a/solenv/gbuild/Library.mk b/solenv/gbuild/Library.mk index 47640bdf0255..7eafe5b93e68 100644 --- a/solenv/gbuild/Library.mk +++ b/solenv/gbuild/Library.mk @@ -60,6 +60,7 @@ $$(eval $$(call gb_Output_error,Library $(1) must be registered in Repository.mk endif $(call gb_Library_get_target,$(1)) : AUXTARGETS := $(call gb_Library__Library_impl,$(1),$(call gb_Library_get_linktargetname,$(1))) +$(call gb_Library_add_default_nativeres,$(1),default) endef @@ -79,9 +80,9 @@ $(call gb_Deliver_add_deliverable,$(call gb_Library_get_target,$(1)),$(call gb_L endef define gb_Library_set_componentfile -$(call gb_ComponentTarget_ComponentTarget,$(2),$(call gb_Library__get_componentprefix,$(1)),$(call gb_Library_get_runtime_filename,$(1))) -$(call gb_Library_get_target,$(1)) : $(call gb_ComponentTarget_get_outdir_target,$(2)) -$(call gb_Library_get_clean_target,$(1)) : $(call gb_ComponentTarget_get_clean_target,$(2)) +$(call gb_ComponentTarget_ComponentTarget,$(or $(strip $(3)),$(strip $(2))),$(call gb_Library__get_componentprefix,$(1)),$(call gb_Library_get_runtime_filename,$(1)),$(2)) +$(call gb_Library_get_target,$(1)) : $(call gb_ComponentTarget_get_outdir_target,$(or $(strip $(3)),$(strip $(2)))) +$(call gb_Library_get_clean_target,$(1)) : $(call gb_ComponentTarget_get_clean_target,$(or $(strip $(3)),$(strip $(2)))) endef diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk index dfbbb916da71..3584fd35118f 100644 --- a/solenv/gbuild/LinkTarget.mk +++ b/solenv/gbuild/LinkTarget.mk @@ -453,6 +453,7 @@ $(call gb_LinkTarget_get_target,$(1)) : PCHOBJS := $(call gb_LinkTarget_get_headers_target,$(1)) \ $(call gb_LinkTarget_get_target,$(1)) : PDBFILE := $(call gb_LinkTarget_get_target,$(1)) : EXTRAOBJECTLISTS := +$(call gb_LinkTarget_get_target,$(1)) : NATIVERES := ifeq ($(gb_FULLDEPS),$(true)) ifneq ($(wildcard $(call gb_LinkTarget_get_dep_target,$(1))),) @@ -694,6 +695,7 @@ endef define gb_LinkTarget_add_linktarget_objects $(call gb_LinkTarget_get_target,$(1)) : $(foreach linktarget,$(2),$(call gb_LinkTarget_get_target,$(linktarget))) +$(info gb_LinkTarget_add_linktarget_objects,$(1),$(2)) $(call gb_LinkTarget_get_target,$(1)) : EXTRAOBJECTLISTS += $(foreach linktarget,$(2),$(call gb_LinkTarget_get_objects_list,$(linktarget))) endef @@ -703,6 +705,7 @@ ifneq (,$$(filter-out $(gb_Library_KNOWNLIBS),$(2))) $$(eval $$(call gb_Output_info,currently known libraries are: $(sort $(gb_Library_KNOWNLIBS)),ALL)) $$(eval $$(call gb_Output_error,Cannot import objects library/libraries $$(filter-out $(gb_Library_KNOWNLIBS),$(2)). Libraries must be registered in Repository.mk)) endif +$(info gb_LinkTarget_add_library_objects,$(1),$(2)) $(call gb_LinkTarget_add_linktarget_objects,$(1),$(foreach lib,$(2),$(call gb_Library_get_linktargetname,$(lib)))) endef diff --git a/solenv/gbuild/TargetLocations.mk b/solenv/gbuild/TargetLocations.mk index f2c7320452df..40ccb305ae7f 100644..100755 --- a/solenv/gbuild/TargetLocations.mk +++ b/solenv/gbuild/TargetLocations.mk @@ -92,6 +92,7 @@ gb_SrsPartTarget_get_target = $(WORKDIR)/SrsPartTarget/$(1) gb_SrsTarget_get_target = $(WORKDIR)/SrsTarget/$(1).srs gb_SrsTemplatePartTarget_get_target = $(WORKDIR)/inc/$(firstword $(subst /, ,$(1)))/$(subst _tmpl,,$(notdir $(1))) gb_SrsTemplateTarget_get_target = $(WORKDIR)/SrsTemplateTarget/$(1) +gb_WinResTarget_get_target = $(WORKDIR)/WinResTarget/$(1)$(gb_WinResTarget_POSTFIX) define gb_Library_get_external_headers_target $(patsubst $(1):%,$(WORKDIR)/ExternalHeaders/Library/%,$(filter $(1):%,$(gb_Library_FILENAMES))) @@ -116,6 +117,7 @@ $(eval $(call gb_Helper_make_clean_targets,\ JunitTest \ LinkTarget \ Module \ + WinResTarget \ NoexPrecompiledHeader \ PackagePart \ PrecompiledHeader \ diff --git a/solenv/gbuild/WinResTarget.mk b/solenv/gbuild/WinResTarget.mk new file mode 100644 index 000000000000..af768ff2c596 --- /dev/null +++ b/solenv/gbuild/WinResTarget.mk @@ -0,0 +1,70 @@ + +# WinResTarget class + +gb_WinResTarget_DEFAULTDEFS := $(gb_RCDEFS) + +define gb_WinResTarget_WinResTarget +$(call gb_WinResTarget_WinResTarget_init,$(1)) +$$(eval $$(call gb_Module_register_target,$(call gb_WinResTarget_get_target,$(1)),$(call gb_WinResTarget_get_clean_target,$(1)))) + +endef + +define gb_WinResTarget_WinResTarget_init +$(call gb_WinResTarget_get_target,$(1)) : DEFS := $(gb_WinResTarget_DEFAULTDEFS) +$(call gb_WinResTarget_get_target,$(1)) : INCLUDE := $(SOLARINC) +$(call gb_WinResTarget_get_clean_target,$(1)) : RCFILE := +$(call gb_WinResTarget_get_target,$(1)) : RCFILE := +ifeq ($(gb_FULLDEPS),$(true)) +$(call gb_WinResTarget_get_target,$(1)) : $(call gb_WinResTarget_get_dep_target,$(1)) +ifneq ($(wildcard $(call gb_WinResTarget_get_dep_target,$(1))),) +include $(call gb_WinResTarget_get_dep_target,$(1)) +else +$(firstword $(MAKEFILE_LIST)) : $(call gb_WinResTarget_get_dep_target,$(1)) +endif +$(call gb_WinResTarget_get_dep_target,$(1)) : DEFS := $$(gb_WinResTarget_DEFAULTDEFS) +$(call gb_WinResTarget_get_dep_target,$(1)) : INCLUDE := $$(gb_WinResTarget_INCLUDE) +$(call gb_WinResTarget_get_dep_target,$(1)) : RCFILE := +endif + +endef + +ifeq ($(gb_FULLDEPS),$(true)) +$(call gb_WinResTarget_get_dep_target,%) : $(gb_Helper_MISCDUMMY) + mkdir -p $(dir $@) && \ + echo '$(call gb_WinResTarget_get_target,$*) : $$(gb_Helper_PHONY)' > $@ +endif + + +$(call gb_WinResTarget_get_target,%) : + $(call gb_Output_announce,$*,$(true),RES,1) + $(call gb_WinResTarget__command_dep,$*,$<) + $(call gb_Helper_abbreviate_dirs,\ + mkdir -p $(dir $@)) + $(call gb_WinResTarget__command,$@) + +$(call gb_WinResTarget_get_clean_target,%) : + $(call gb_Helper_abbreviate_dirs,\ + rm -f $(call gb_WinResTarget_get_target,$*)) + +define gb_WinResTarget_set_defs +$(call gb_WinResTarget_get_target,$(1)) : DEFS := $(2) +$(call gb_WinResTarget_get_dep_target,$(1)) : DEFS := $(2) + +endef + +define gb_WinResTarget_set_include +$(call gb_WinResTarget_get_target,$(1)) : INCLUDE := $(2) + +endef + +define gb_WinResTarget_add_file +$(call gb_WinResTarget_get_clean_target,$(1)) : RCFILE=$(gb_Helper_SRCDIR_NATIVE)/$(2).rc +$(call gb_WinResTarget_get_target,$(1)) : RCFILE=$(foreach file,$(gb_REPOS),$(realpath $(file)/$(strip $(2)).rc)) +$(call gb_WinResTarget_get_target,$(1)) : $(foreach file,$(gb_REPOS),$(realpath $(file)/$(strip $(2)).rc)) + +endef + +define gb_WinResTarget_add_dependency +$(call gb_WinResTarget_get_target,$(1)) : $(foreach file,$(2),$(foreach repo,$(gb_REPOS),$(realpath $(repo)/$(strip $(file))))) + +endef diff --git a/solenv/gbuild/filter-showIncludes.pl b/solenv/gbuild/filter-showIncludes.pl new file mode 100755 index 000000000000..f72a9eb07fd8 --- /dev/null +++ b/solenv/gbuild/filter-showIncludes.pl @@ -0,0 +1,62 @@ +#!/usr/bin/env perl +# +# filter-showIncludes.pl depfile.d objfile.o orginal.cxx +# +# Create dependency information from the output of cl.exe's showInclude. It +# needs additional information - the output name to which to write, objfile +# that depends on the includes, and the original file name. +# +# It also consolidates the file names to a canonical form, and filters out +# duplicates. +# +# LGPL v3 / GPL v3 / MPL 1.1 +# +# Original author: Jan Holesovsky <kendy@suse.cz> + +my $outfile = $ARGV[0]; +my $objfile = $ARGV[1]; +my $srcfile = $ARGV[2]; +if ( !defined $outfile || !defined $objfile || !defined $srcfile ) { + die "Not enough parameters to create dependencies."; +} + +my $showincludes_prefix = $ENV{'SHOWINCLUDES_PREFIX'}; +if ( !defined( $showincludes_prefix ) || $showincludes_prefix eq "" ) { + $showincludes_prefix = 'Note: including file:'; +} + +open( OUT, "> $outfile" ) or die "Cannot open $outfile for writing."; +print OUT "$objfile: \\\n $srcfile"; + +my %seen; +my $first_line = 1; +while ( <STDIN> ) { + if ( /^$showincludes_prefix/ ) { + s/^$showincludes_prefix\s*//; + s/\r$//; + + chomp; + s/\\/\//g; + + # X: -> /cygdrive/x/ + s/^(.):/\/cygdrive\/\l\1/; + + s/ /\\ /g; + + if ( !defined $seen{$_} ) { + $seen{$_} = 1; + print OUT " \\\n $_"; + } + } + else { + # skip the first line, it always just duplicates what is being + # compiled + print unless ( $first_line ); + } + $first_line = 0; +} + +print OUT "\n"; +close( OUT ) or die "Cannot close $outfile."; + +# vim: shiftwidth=4 softtabstop=4 expandtab: diff --git a/solenv/gbuild/gbuild.mk b/solenv/gbuild/gbuild.mk index 4c20c8d77d11..9943b334903a 100644 --- a/solenv/gbuild/gbuild.mk +++ b/solenv/gbuild/gbuild.mk @@ -264,6 +264,7 @@ $(eval $(call gb_Deliver_init)) include $(foreach class, \ ComponentTarget \ AllLangResTarget \ + WinResTarget \ LinkTarget \ Library \ StaticLibrary \ diff --git a/solenv/gbuild/platform/macosx.mk b/solenv/gbuild/platform/macosx.mk index b016a95fdc0f..ae57972d814d 100644 --- a/solenv/gbuild/platform/macosx.mk +++ b/solenv/gbuild/platform/macosx.mk @@ -29,7 +29,7 @@ GUI := UNX COM := GCC # Darwin mktemp -t expects a prefix, not a pattern -gb_MKTEMP := /usr/bin/mktemp -t gbuild. +gb_MKTEMP ?= /usr/bin/mktemp -t gbuild. gb_CC := cc gb_CXX := g++ @@ -246,7 +246,7 @@ endef gb_LinkTarget_CFLAGS := $(gb_CFLAGS) $(gb_CFLAGS_WERROR) $(gb_COMPILEROPTFLAGS) gb_LinkTarget_CXXFLAGS := $(gb_CXXFLAGS) $(gb_CXXFLAGS_WERROR) -gb_LinkTarget_OBJCXXFLAGS := $(gb_CXXFLAGS) $(gb_OBJCXXFLAGS) $(gb_COMPILEROPTFLAGS) +gb_LinkTarget_OBJCXXFLAGS := $(gb_CXXFLAGS) $(gb_CXXFLAGS_WERROR) $(gb_OBJCXXFLAGS) $(gb_COMPILEROPTFLAGS) gb_LinkTarget_OBJCFLAGS := $(gb_CFLAGS) $(gb_OBJCFLAGS) $(gb_COMPILEROPTFLAGS) ifeq ($(gb_SYMBOL),$(true)) diff --git a/solenv/gbuild/platform/solaris.mk b/solenv/gbuild/platform/solaris.mk index 591c10003cea..d30fe2fdb03a 100644 --- a/solenv/gbuild/platform/solaris.mk +++ b/solenv/gbuild/platform/solaris.mk @@ -101,6 +101,8 @@ gb_LinkTarget_LDFLAGS := \ -temp=/tmp \ -w \ -mt \ + -Bdirect \ + -z defs \ -z combreloc \ -norunpath \ -PIC \ @@ -244,14 +246,23 @@ gb_Library_OOOEXT := ss$(gb_Library_PLAINEXT) gb_Library_UNOEXT := .uno$(gb_Library_PLAINEXT) endif +gb_STDLIBS := \ + Crun \ + m \ + c \ + gb_Library_PLAINLIBS_NONE += \ + $(gb_STDLIBS) \ dl \ + freetype \ GL \ GLU \ jpeg \ - m \ pthread \ X11 \ + Xext \ + SM \ + ICE \ z gb_Library_FILENAMES := \ diff --git a/solenv/gbuild/platform/unxgcc.mk b/solenv/gbuild/platform/unxgcc.mk index c17805fb1883..dde1bc8ed5b1 100644 --- a/solenv/gbuild/platform/unxgcc.mk +++ b/solenv/gbuild/platform/unxgcc.mk @@ -298,12 +298,16 @@ gb_Library_UNOEXT := .uno$(gb_Library_PLAINEXT) gb_Library_PLAINLIBS_NONE += \ dl \ + freetype \ GL \ GLU \ + ICE \ jpeg \ m \ pthread \ + SM \ X11 \ + Xext \ z gb_Library_FILENAMES := \ diff --git a/solenv/gbuild/platform/windows.mk b/solenv/gbuild/platform/windows.mk index 05d73080af60..5fff55f4bf09 100644 --- a/solenv/gbuild/platform/windows.mk +++ b/solenv/gbuild/platform/windows.mk @@ -37,6 +37,7 @@ gb_CXX := cl gb_LINK := link gb_AWK := awk gb_CLASSPATHSEP := ; +gb_RC := rc # use CC/CXX if they are nondefaults ifneq ($(origin CC),default) @@ -67,6 +68,13 @@ gb_COMPILERDEFS := \ gb_CPUDEFS := -DINTEL -D_X86_=1 +gb_RCDEFS := \ + -DWINVER=0x0400 \ + -DWIN32 \ + +gb_RCFLAGS := \ + -V + gb_CFLAGS := \ -Gd \ -GR \ @@ -211,6 +219,16 @@ endif gb_COMPILERNOOPTFLAGS := -Od +ifeq ($(gb_FULLDEPS),$(true)) +gb_COMPILERDEPFLAGS := -showIncludes +define gb_create_deps +| $(GBUILDDIR)/filter-showIncludes.pl $(2) $(1) $(3) +endef +else +gb_COMPILERDEPFLAGS := +define gb_create_deps +endef +endif # Helper class gb_Helper_SRCDIR_NATIVE := $(shell cygpath -m $(SRCDIR) | $(gb_AWK) -- '{ print tolower(substr($$0,1,1)) substr($$0,2) }') @@ -239,27 +257,6 @@ endef # CObject class -ifeq ($(gb_FULLDEPS),$(true)) -define gb_CObject__command_deponcompile -$(call gb_Helper_abbreviate_dirs_native,\ - $(OUTDIR)/bin/makedepend$(gb_Executable_EXT) \ - $(filter-out -DPRECOMPILED_HEADERS,$(4)) $(5) \ - -I$(dir $(3)) \ - $(filter-out -I$(COMPATH)% %/pch -I$(JAVA_HOME),$(6)) \ - $(3) \ - -f - \ - | $(gb_AWK) -f $(GBUILDDIR)/processdeps.awk \ - -v OBJECTFILE=$(1) \ - -v OUTDIR=$(OUTDIR)/ \ - -v WORKDIR=$(WORKDIR)/ \ - -v SRCDIR=$(SRCDIR)/ \ - -v REPODIR=$(REPODIR)/ \ - > $(call gb_CObject_get_dep_target,$(2))) -endef -else -CObject__command_deponcompile = -endif - define gb_CObject__command $(call gb_Output_announce,$(2),$(true),C ,3) $(call gb_Helper_abbreviate_dirs_native,\ @@ -268,37 +265,16 @@ $(call gb_Helper_abbreviate_dirs_native,\ $(gb_CC) \ $(DEFS) $(CFLAGS) -Fd$(PDBFILE) \ $(PCHFLAGS) \ + $(gb_COMPILERDEPFLAGS) \ -I$(realpath $(dir $(3))) \ $(INCLUDE) \ -c $(realpath $(3)) \ - -Fo$(1)) -$(call gb_CObject__command_deponcompile,$(1),$(2),$(3),$(DEFS),$(CFLAGS),$(INCLUDE)) + -Fo$(1)) $(call gb_create_deps,$(1),$(call gb_CObject_get_dep_target,$(2)),$(realpath $(3))) endef # CxxObject class -ifeq ($(gb_FULLDEPS),$(true)) -define gb_CxxObject__command_deponcompile -$(call gb_Helper_abbreviate_dirs_native,\ - $(OUTDIR)/bin/makedepend$(gb_Executable_EXT) \ - $(filter-out -DPRECOMPILED_HEADERS,$(4)) $(5) \ - -I$(dir $(3)) \ - $(filter-out -I$(COMPATH)% %/pch -I$(JAVA_HOME),$(6)) \ - $(3) \ - -f - \ - | $(gb_AWK) -f $(GBUILDDIR)/processdeps.awk \ - -v OBJECTFILE=$(1) \ - -v OUTDIR=$(OUTDIR)/ \ - -v WORKDIR=$(WORKDIR)/ \ - -v SRCDIR=$(SRCDIR)/ \ - -v REPODIR=$(REPODIR)/ \ - > $(call gb_CxxObject_get_dep_target,$(2))) - endef -else -gb_CxxObject__command_deponcompile = -endif - define gb_CxxObject__command $(call gb_Output_announce,$(2),$(true),CXX,3) $(call gb_Helper_abbreviate_dirs_native,\ @@ -307,40 +283,18 @@ $(call gb_Helper_abbreviate_dirs_native,\ $(gb_CXX) \ $(DEFS) $(CXXFLAGS) -Fd$(PDBFILE)\ $(PCHFLAGS) \ + $(gb_COMPILERDEPFLAGS) \ -I$(realpath $(dir $(3))) \ $(INCLUDE_STL) $(INCLUDE) \ -c $(realpath $(3)) \ - -Fo$(1)) -$(call gb_CxxObject__command_deponcompile,$(1),$(2),$(3),$(DEFS),$(CFLAGS),$(INCLUDE)) + -Fo$(1)) $(call gb_create_deps,$(1),$(call gb_CxxObject_get_dep_target,$(2)),$(realpath $(3))) endef # PrecompiledHeader class gb_PrecompiledHeader_get_enableflags = -Yu$(1).hxx \ - -Fp$(call gb_PrecompiledHeader_get_target,$(1)) - -ifeq ($(gb_FULLDEPS),$(true)) -define gb_PrecompiledHeader__command_deponcompile -$(call gb_Helper_abbreviate_dirs_native,\ - $(OUTDIR)/bin/makedepend$(gb_Executable_EXT) \ - $(4) $(5) \ - -I$(dir $(3)) \ - $(filter-out -I$(COMPATH)% -I$(JAVA_HOME),$(6)) \ - $(3) \ - -f - \ - | $(gb_AWK) -f $(GBUILDDIR)/processdeps.awk \ - -v OBJECTFILE=$(1) \ - -v OUTDIR=$(OUTDIR)/ \ - -v WORKDIR=$(WORKDIR)/ \ - -v SRCDIR=$(SRCDIR)/ \ - -v REPODIR=$(REPODIR)/ \ - > $(call gb_PrecompiledHeader_get_dep_target,$(2))) -endef -else -gb_PrecompiledHeader__command_deponcompile = -endif - + -Fp$(call gb_PrecompiledHeader_get_target,$(1)) define gb_PrecompiledHeader__command $(call gb_Output_announce,$(2),$(true),PCH,1) @@ -349,39 +303,17 @@ $(call gb_Helper_abbreviate_dirs_native,\ unset INCLUDE && \ $(gb_CXX) \ $(4) $(5) -Fd$(PDBFILE) \ + $(gb_COMPILERDEPFLAGS) \ -I$(realpath $(dir $(3))) \ $(6) \ -c $(realpath $(3)) \ - -Yc$(notdir $(patsubst %.cxx,%.hxx,$(3))) -Fp$(1) -Fo$(1).obj) -$(call gb_PrecompiledHeader__command_deponcompile,$(1),$(2),$(3),$(4),$(5),$(6)) + -Yc$(notdir $(patsubst %.cxx,%.hxx,$(3))) -Fp$(1) -Fo$(1).obj) $(call gb_create_deps,$(1),$(call gb_PrecompiledHeader_get_dep_target,$(2)),$(realpath $(3))) endef # NoexPrecompiledHeader class gb_NoexPrecompiledHeader_get_enableflags = -Yu$(1).hxx \ - -Fp$(call gb_NoexPrecompiledHeader_get_target,$(1)) - -ifeq ($(gb_FULLDEPS),$(true)) -define gb_NoexPrecompiledHeader__command_deponcompile -$(call gb_Helper_abbreviate_dirs_native,\ - $(OUTDIR)/bin/makedepend$(gb_Executable_EXT) \ - $(4) $(5) \ - -I$(dir $(3)) \ - $(filter-out -I$(COMPATH)% -I$(JAVA_HOME),$(6)) \ - $(3) \ - -f - \ - | $(gb_AWK) -f $(GBUILDDIR)/processdeps.awk \ - -v OBJECTFILE=$(1) \ - -v OUTDIR=$(OUTDIR)/ \ - -v WORKDIR=$(WORKDIR)/ \ - -v SRCDIR=$(SRCDIR)/ \ - -v REPODIR=$(REPODIR)/ \ - > $(call gb_NoexPrecompiledHeader_get_dep_target,$(2))) -endef -else -gb_NoexPrecompiledHeader__command_deponcompile = -endif - + -Fp$(call gb_NoexPrecompiledHeader_get_target,$(1)) define gb_NoexPrecompiledHeader__command $(call gb_Output_announce,$(2),$(true),PCH,1) @@ -390,14 +322,13 @@ $(call gb_Helper_abbreviate_dirs_native,\ unset INCLUDE && \ $(gb_CXX) \ $(4) $(5) -Fd$(PDBFILE) \ + $(gb_COMPILERDEPFLAGS) \ -I$(realpath $(dir $(3))) \ $(6) \ -c $(realpath $(3)) \ - -Yc$(notdir $(patsubst %.cxx,%.hxx,$(3))) -Fp$(1) -Fo$(1).obj) -$(call gb_NoexPrecompiledHeader__command_deponcompile,$(1),$(2),$(3),$(4),$(5),$(6)) + -Yc$(notdir $(patsubst %.cxx,%.hxx,$(3))) -Fp$(1) -Fo$(1).obj) $(call gb_create_deps,$(1),$(call gb_NoexPrecompiledHeader,$(2)),$(realpath $(3))) endef - # LinkTarget class gb_LinkTarget_CFLAGS := $(gb_CFLAGS) $(gb_CFLAGS_WERROR) $(gb_COMPILEROPTFLAGS) @@ -421,7 +352,7 @@ $(call gb_Helper_abbreviate_dirs_native,\ $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ $(foreach extraobjectlist,$(EXTRAOBJECTLISTS),$(shell cat $(extraobjectlist))) \ - $(PCHOBJS))) && \ + $(PCHOBJS) $(NATIVERES))) && \ $(gb_LINK) \ $(if $(filter Library CppunitTest,$(TARGETTYPE)),$(gb_Library_TARGETTYPEFLAGS)) \ $(if $(filter StaticLibrary,$(TARGETTYPE)),$(gb_StaticLibrary_TARGETTYPEFLAGS)) \ @@ -447,8 +378,11 @@ gb_Library_PLAINEXT := .lib gb_Library_PLAINLIBS_NONE += \ advapi32 \ gdi32 \ + gdiplus \ gnu_getopt \ + imm32\ kernel32 \ + msimg32 \ msvcrt \ msvcprt \ mpr \ @@ -461,6 +395,7 @@ gb_Library_PLAINLIBS_NONE += \ user32 \ uuid \ uwinapi \ + winspool \ z \ gb_Library_LAYER := \ @@ -525,6 +460,26 @@ $(call gb_LinkTarget_get_headers_target,$(2)) : PDBFILE = $(call gb_LinkTarget_g endef +define gb_Library_add_default_nativeres +$(call gb_WinResTarget_WinResTarget_init,$(1)/$(2)) +$(call gb_WinResTarget_add_file,$(1)/$(2),solenv/inc/shlinfo) +$(call gb_WinResTarget_set_defs,$(1)/$(2),\ + $$(DEFS) \ + -DADDITIONAL_VERINFO1 \ + -DADDITIONAL_VERINFO2 \ + -DADDITIONAL_VERINFO3 \ +) +$(call gb_Library_add_nativeres,$(1),$(2)) +$(call gb_Library_get_clean_target,$(1)) : $(call gb_WinResTarget_get_clean_target,$(1)/$(2)) + +endef + +define gb_Library_add_nativeres +$(call gb_LinkTarget_get_target,$(call gb_Library__get_linktargetname,$(1))) : $(call gb_WinResTarget_get_target,$(1)/$(2)) +$(call gb_LinkTarget_get_target,$(call gb_Library__get_linktargetname,$(1))) : NATIVERES += $(call gb_WinResTarget_get_target,$(1)/$(2)) + +endef + define gb_Library_get_dllname $(patsubst $(1):%,%,$(filter $(1):%,$(gb_Library_DLLFILENAMES))) endef @@ -685,6 +640,45 @@ else gb_SrsPartTarget__command_dep = endif +# WinResTarget class + +gb_WinResTarget_POSTFIX :=.res + +define gb_WinResTarget__command +$(call gb_Output_announce,$(2),$(true),RES,3) +$(call gb_Helper_abbreviate_dirs_native,\ + mkdir -p $(dir $(1)) && \ + $(gb_RC) \ + $(DEFS) $(FLAGS) \ + -I$(dir $(3)) \ + $(INCLUDE) \ + -Fo$(1) \ + $(RCFILE) ) +endef + +$(eval $(call gb_Helper_make_dep_targets,\ + WinResTarget \ +)) + +ifeq ($(gb_FULLDEPS),$(true)) +define gb_WinResTarget__command_dep +$(call gb_Helper_abbreviate_dirs_native,\ + $(OUTDIR)/bin/makedepend$(gb_Executable_EXT) \ + $(INCLUDE) \ + $(DEFS) \ + $(2) \ + -f - \ + | $(gb_AWK) -f $(GBUILDDIR)/processdeps.awk \ + -v OBJECTFILE=$(call gb_WinResTarget_get_target,$(1)) \ + -v OUTDIR=$(OUTDIR)/ \ + -v WORKDIR=$(WORKDIR)/ \ + -v SRCDIR=$(SRCDIR)/ \ + -v REPODIR=$(REPODIR)/ \ + > $(call gb_WinResTarget_get_dep_target,$(1))) +endef +else +gb_WinResTarget__command_dep = +endif # ComponentTarget diff --git a/solenv/gbuild/platform/winmingw.mk b/solenv/gbuild/platform/winmingw.mk index d846f7c18cdf..c8fe4f0d85a9 100644 --- a/solenv/gbuild/platform/winmingw.mk +++ b/solenv/gbuild/platform/winmingw.mk @@ -100,6 +100,13 @@ gb_CPUDEFS := \ -DINTEL \ -D_M_IX86 \ +gb_RCDEFS := \ + -DWINVER=0x0400 \ + -DWIN32 \ + +gb_RCFLAGS := \ + -V + gb_CFLAGS := \ -Wall \ -Wendif-labels \ @@ -546,6 +553,26 @@ $(call gb_Deliver_add_deliverable,$(OUTDIR)/bin/$(notdir $(3)),$(3)) endef +define gb_Library_add_default_nativeres +$(call gb_WinResTarget_WinResTarget_init,$(1)/$(2)) +$(call gb_WinResTarget_add_file,$(1)/$(2),solenv/inc/shlinfo) +$(call gb_WinResTarget_set_defs,$(1)/$(2),\ + $$(DEFS) \ + -DADDITIONAL_VERINFO1 \ + -DADDITIONAL_VERINFO2 \ + -DADDITIONAL_VERINFO3 \ +) +$(call gb_Library_add_nativeres,$(1),$(2)) +$(call gb_Library_get_clean_target,$(1)) : $(call gb_WinResTarget_get_clean_target,$(1)/$(2)) + +endef + +define gb_Library_add_nativeres +$(call gb_LinkTarget_get_target,$(call gb_Library__get_linktargetname,$(1))) : $(call gb_WinResTarget_get_target,$(1)/$(2)) +$(call gb_LinkTarget_get_target,$(call gb_Library__get_linktargetname,$(1))) : NATIVERES += $(call gb_WinResTarget_get_target,$(1)/$(2)) + +endef + define gb_Library_get_dllname $(patsubst $(1):%,%,$(filter $(1):%,$(gb_Library_DLLFILENAMES))) endef @@ -624,6 +651,48 @@ else gb_SrsPartTarget__command_dep = endif +# WinResTarget class + +gb_WinResTarget_POSTFIX :=_res.o + +define gb_WinResTarget__command +$(call gb_Output_announce,$(2),$(true),RES,3) +$(call gb_Helper_abbreviate_dirs_native,\ + mkdir -p $(dir $(1)) && \ + $(gb_RC) \ + $(DEFS) $(FLAGS) \ + -I$(dir $(3)) \ + $(INCLUDE) \ + -Fo$(patsubst %_res.o,%.res,$(1)) \ + $(RCFILE) ) + windres $(patsubst %_res.o,%.res,$(1)) $(1) + rm $(patsubst %_res.o,%.res,$(1)) +endef + +$(eval $(call gb_Helper_make_dep_targets,\ + WinResTarget \ +)) + +ifeq ($(gb_FULLDEPS),$(true)) +define gb_WinResTarget__command_dep +$(call gb_Helper_abbreviate_dirs_native,\ + $(OUTDIR)/bin/makedepend$(gb_Executable_EXT) \ + $(INCLUDE) \ + $(DEFS) \ + $(2) \ + -f - \ + | $(gb_AWK) -f $(GBUILDDIR)/processdeps.awk \ + -v OBJECTFILE=$(call gb_WinResTarget_get_target,$(1)) \ + -v OUTDIR=$(OUTDIR)/ \ + -v WORKDIR=$(WORKDIR)/ \ + -v SRCDIR=$(SRCDIR)/ \ + -v REPODIR=$(REPODIR)/ \ + > $(call gb_WinResTarget_get_dep_target,$(1))) +endef +else +gb_WinResTarget__command_dep = +endif + # ComponentTarget gb_XSLTPROCPRECOMMAND := PATH="$${PATH}:$(OUTDIR)/bin" diff --git a/solenv/inc/langlist.mk b/solenv/inc/langlist.mk index 18680e77ce38..f4e485380ae1 100644 --- a/solenv/inc/langlist.mk +++ b/solenv/inc/langlist.mk @@ -150,6 +150,7 @@ tlh \ th \ tn \ tr \ +tk \ ts \ tg \ ug \ diff --git a/solenv/inc/minor.mk b/solenv/inc/minor.mk index dfd0189badb8..38646f16b5b3 100644 --- a/solenv/inc/minor.mk +++ b/solenv/inc/minor.mk @@ -1,5 +1,5 @@ -RSCVERSION=340 -RSCREVISION=340m1(Build:1) +RSCVERSION=350 +RSCREVISION=350m1(Build:1) BUILD=1 LAST_MINOR=m1 -SOURCEVERSION=OOO340 +SOURCEVERSION=OOO350 diff --git a/solenv/inc/settings.mk b/solenv/inc/settings.mk index 04dfd3490387..da564bf60724 100644 --- a/solenv/inc/settings.mk +++ b/solenv/inc/settings.mk @@ -826,6 +826,10 @@ SOLARCOMMONSDFDIR=$(SOLARSDFDIR) .EXPORT : SOLARBINDIR +.IF "$(GUI)" == "WNT" +L10N_MODULE*=$(shell cygpath -m $(SRC_ROOT)/translations) +.ELSE +.ENDIF .IF "$(WITH_LANG)"!="" .INCLUDE .IGNORE: $(L10N_MODULE)/$(COMMON_OUTDIR)$(PROEXT)/inc/localization_present.mk |