sdk/lib dir missing from Linux installation sets

...after cfd2691e5b "[API CHANGE] Remove salcpprt
static library" had removed the sole regular File item from gid_Dir_Lib_Sdk,
leaving only Unixlink items.  But the solenv/bin/modules/installer.pm code used
to only auto-create any directories that contain regular Files.  Changed that to
also consider Unixlinks in addition to regular Files.

And to add insult to injury, the code in
solenv/bin/modules/installer/simplepackage.pm creating the actual symlinks
represented by the Unixlink items silently does nothing when a symlink cannot be
created (because the partent dir is missing).  To be fixed in another follow-up
commit.

Change-Id: Ic7a682a17ac59c789c85c56c825dd623bc59428c
This commit is contained in:
Stephan Bergmann
2018-03-16 14:21:01 +01:00
parent eb76e16abb
commit f07e249696
2 changed files with 21 additions and 19 deletions

View File

@@ -632,6 +632,18 @@ sub run {
installer::scpzipfiles::resolving_scpzip_replace_flag($filesinproductlanguageresolvedarrayref, $allvariableshashref, "File", $languagestringref);
#########################################################
# language dependent unix links part
#########################################################
installer::logger::print_message( "... analyzing unix links ...\n" );
my $unixlinksinproductlanguageresolvedarrayref = installer::scriptitems::resolving_all_languages_in_productlists($unixlinksinproductarrayref, $languagesarrayref);
installer::scriptitems::changing_name_of_language_dependent_keys($unixlinksinproductlanguageresolvedarrayref);
installer::scriptitems::get_Destination_Directory_For_Item_From_Directorylist($unixlinksinproductlanguageresolvedarrayref, $dirsinproductarrayref);
############################################
# Collecting directories for epm list file
############################################
@@ -645,8 +657,7 @@ sub run {
# It will be possible, that in the setup script only those directoies have to be defined,
# that have a CREATE flag. All other directories are created, if they contain at least one file.
my ($directoriesforepmarrayref, $alldirectoryhash) = installer::scriptitems::collect_directories_from_filesarray($filesinproductlanguageresolvedarrayref);
my ($directoriesforepmarrayref, $alldirectoryhash) = installer::scriptitems::collect_directories_from_filesarray($filesinproductlanguageresolvedarrayref, $unixlinksinproductlanguageresolvedarrayref);
($directoriesforepmarrayref, $alldirectoryhash) = installer::scriptitems::collect_directories_with_create_flag_from_directoryarray($dirsinproductlanguageresolvedarrayref, $alldirectoryhash);
#########################################################
@@ -685,18 +696,6 @@ sub run {
installer::scriptitems::resolve_links_with_flag_relative($linksinproductlanguageresolvedarrayref);
#########################################################
# language dependent unix links part
#########################################################
installer::logger::print_message( "... analyzing unix links ...\n" );
my $unixlinksinproductlanguageresolvedarrayref = installer::scriptitems::resolving_all_languages_in_productlists($unixlinksinproductarrayref, $languagesarrayref);
installer::scriptitems::changing_name_of_language_dependent_keys($unixlinksinproductlanguageresolvedarrayref);
installer::scriptitems::get_Destination_Directory_For_Item_From_Directorylist($unixlinksinproductlanguageresolvedarrayref, $dirsinproductarrayref);
#########################################################
# language dependent part for profiles and profileitems
#########################################################
@@ -810,7 +809,7 @@ sub run {
@{$folderitemsinproductlanguageresolvedarrayref} = (); # no folderitems in languagepacks
# Collecting the directories again, to include only the language specific directories
($directoriesforepmarrayref, $alldirectoryhash) = installer::scriptitems::collect_directories_from_filesarray($filesinproductlanguageresolvedarrayref);
($directoriesforepmarrayref, $alldirectoryhash) = installer::scriptitems::collect_directories_from_filesarray($filesinproductlanguageresolvedarrayref, $unixlinksinproductlanguageresolvedarrayref);
($directoriesforepmarrayref, $alldirectoryhash) = installer::scriptitems::collect_directories_with_create_flag_from_directoryarray($dirsinproductlanguageresolvedarrayref, $alldirectoryhash);
@$directoriesforepmarrayref = sort { $a->{"HostName"} cmp $b->{"HostName"} } @$directoriesforepmarrayref;
@@ -831,7 +830,7 @@ sub run {
@{$folderitemsinproductlanguageresolvedarrayref} = (); # no folderitems in helppacks
# Collecting the directories again, to include only the language specific directories
($directoriesforepmarrayref, $alldirectoryhash) = installer::scriptitems::collect_directories_from_filesarray($filesinproductlanguageresolvedarrayref);
($directoriesforepmarrayref, $alldirectoryhash) = installer::scriptitems::collect_directories_from_filesarray($filesinproductlanguageresolvedarrayref, $unixlinksinproductlanguageresolvedarrayref);
($directoriesforepmarrayref, $alldirectoryhash) = installer::scriptitems::collect_directories_with_create_flag_from_directoryarray($dirsinproductlanguageresolvedarrayref, $alldirectoryhash);
@$directoriesforepmarrayref = sort { $a->{"HostName"} cmp $b->{"HostName"} } @$directoriesforepmarrayref;

View File

@@ -1584,7 +1584,10 @@ sub optimize_list
sub collect_directories_from_filesarray
{
my ($filesarrayref) = @_;
my ($filesarrayref, $unixlinksarrayref) = @_;
my @allfiles;
push @allfiles, @{$filesarrayref};
push @allfiles, @{$unixlinksarrayref};
my @alldirectories = ();
my %alldirectoryhash = ();
@@ -1594,9 +1597,9 @@ sub collect_directories_from_filesarray
# Preparing this already as hash, although the only needed value at the moment is the HostName
# But also adding: "specificlanguage" and "Dir" (for instance gid_Dir_Program)
for ( my $i = 0; $i <= $#{$filesarrayref}; $i++ )
for ( my $i = 0; $i <= $#allfiles; $i++ )
{
my $onefile = ${$filesarrayref}[$i];
my $onefile = $allfiles[$i];
my $destinationpath = $onefile->{'destination'};
installer::pathanalyzer::get_path_from_fullqualifiedname(\$destinationpath);
$destinationpath =~ s/\Q$installer::globals::separator\E\s*$//; # removing ending slashes or backslashes