Skip to content

Commit d1e7e39

Browse files
committed
configurable per config build directory in user-project.json
1 parent ad70c66 commit d1e7e39

File tree

1 file changed

+30
-27
lines changed

1 file changed

+30
-27
lines changed

lib/Perl/Dist/APPerl.pm

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -922,12 +922,11 @@ sub Status {
922922

923923
# unfortunately this needs to be called in several places to try to keep them in sync
924924
# as perl's make trips up when trying to build an symlinked extension
925-
sub _install_perl_repo_files {
926-
my ($itemconfig, $SiteConfig) = @_;
925+
sub _install_perl_src_files {
926+
my ($itemconfig, $perl_build_dir) = @_;
927927
foreach my $dest (keys %{$itemconfig->{perl_repo_files}}) {
928928
foreach my $file (@{$itemconfig->{perl_repo_files}{$dest}}) {
929-
#_command_or_die('ln', '-sf', START_WD."/$file", "$SiteConfig->{perl_repo}/$dest");
930-
_copy_recursive(START_WD."/$file", "$SiteConfig->{perl_repo}/$dest");
929+
_copy_recursive(START_WD."/$file", "$perl_build_dir/$dest");
931930
}
932931
}
933932
}
@@ -955,11 +954,13 @@ sub Set {
955954
} else {
956955
-d $SiteConfig->{cosmocc} or die $SiteConfig->{cosmocc} . ' is not a directory';
957956
}
958-
#$UserProjectConfig->{configs}{$cfgname}{perl_build_dir} //= $SiteConfig->{perl_repo} // "$UserProjectConfig->{apperl_output}/$cfgname/tmp/perl5";
957+
$UserProjectConfig->{configs}{$cfgname}{perl_build_dir} //= $SiteConfig->{perl_repo} if !$itemconfig->{perl_url};
958+
$UserProjectConfig->{configs}{$cfgname}{perl_build_dir} //= "$UserProjectConfig->{apperl_output}/$cfgname/tmp/perl5";
959+
my $perl_build_dir = $UserProjectConfig->{configs}{$cfgname}{perl_build_dir};
959960
if (! $itemconfig->{perl_url}) {
960-
-d $SiteConfig->{perl_repo} or die $SiteConfig->{perl_repo} .' is not directory';
961-
print "cd ".$SiteConfig->{perl_repo}."\n";
962-
chdir($SiteConfig->{perl_repo}) or die "Failed to enter perl repo";
961+
-d $perl_build_dir or die $perl_build_dir .' is not directory';
962+
print "cd ".$perl_build_dir."\n";
963+
chdir($perl_build_dir) or die "Failed to enter perl repo";
963964
print "make veryclean\n";
964965
system("make", "veryclean");
965966
foreach my $todelete ('miniperl.com', 'perl.com', 'miniperl.elf', 'miniperl.com.dbg', 'perl.elf', 'perl.com.dbg') {
@@ -971,27 +972,27 @@ sub Set {
971972
$itemconfig->{patches} //= [];
972973
} else {
973974
my $tarball_name = basename($itemconfig->{perl_url});
974-
_command_or_die('mkdir', '-p', $SiteConfig->{perl_repo});
975-
my $download_dir = $SiteConfig->{perl_repo} . '/..';
975+
my $download_dir = $UserProjectConfig->{apperl_output};
976976
chdir($download_dir) or die "Failed to enter download dir";
977977
if (! -f $tarball_name) {
978978
_command_or_die('wget', $itemconfig->{perl_url});
979979
}
980980
_command_or_die('tar', '-xf', $tarball_name);
981-
_command_or_die("rm", '-rf', $SiteConfig->{perl_repo});
981+
_command_or_die("rm", '-rf', $perl_build_dir);
982982
my ($version) = $tarball_name =~ /^v(\d+\.\d+\.\d+)\.tar/;
983983
my $tomove = "perl5-$version";
984-
_command_or_die('mv', $tomove, 'perl5');
985-
chdir($SiteConfig->{perl_repo}) or die "Failed to enter perl repo";
984+
_command_or_die('mv', $tomove, $perl_build_dir);
985+
chdir($perl_build_dir) or die "Failed to enter perl repo";
986986
}
987987
foreach my $patch (@{$itemconfig->{patches}}) {
988988
my $realpatch = _fix_bases($patch, {__sharedir__ => SHARE_DIR});
989-
_command_or_die('git', 'apply', $realpatch);
989+
my $cmd = "patch -p1 < $realpatch"; # can't git apply to ignored files within a git repository :(
990+
print "$cmd\n";
991+
system($cmd) == 0 or die "failed to apply patch $realpatch";
990992
}
991-
992993
print "cd ".START_WD."\n";
993994
chdir(START_WD) or die "Failed to restore cwd";
994-
_install_perl_repo_files($itemconfig, $SiteConfig);
995+
_install_perl_src_files($itemconfig, $perl_build_dir);
995996
}
996997
else {
997998
my $validperl;
@@ -1021,10 +1022,11 @@ sub Configure {
10211022
my $UserProjectConfig = _load_valid_user_project_config_with_default($Configs) or die "cannot Configure without valid UserProjectConfig";
10221023
my $CurAPPerlName = $UserProjectConfig->{current_apperl};
10231024
! exists $UserProjectConfig->{nobuild_perl_bin} or die "nobuild perl cannot be configured";
1024-
my $SiteConfig = _load_json(SITE_CONFIG_FILE) or die "cannot Configure without build deps (run apperlm install-build-deps)";
1025-
-d $SiteConfig->{perl_repo} or die $SiteConfig->{perl_repo} .' is not directory';
1025+
my $perl_build_dir = $UserProjectConfig->{configs}{$CurAPPerlName}{perl_build_dir};
1026+
$perl_build_dir && -d $perl_build_dir or die "$perl_build_dir is not a directory";
10261027
my $itemconfig = _load_apperl_config($Configs->{apperl_configs}, $CurAPPerlName);
1027-
_install_perl_repo_files($itemconfig, $SiteConfig);
1028+
my $SiteConfig = _load_json(SITE_CONFIG_FILE) or die "cannot Configure without build deps (run apperlm install-build-deps)";
1029+
_install_perl_src_files($itemconfig, $perl_build_dir);
10281030

10291031
if(! $itemconfig->{cosmo3}) {
10301032
-d $SiteConfig->{cosmo_repo} or die $SiteConfig->{cosmo_repo} .' is not directory';
@@ -1047,8 +1049,8 @@ sub Configure {
10471049
}
10481050

10491051
# Finally Configure perl
1050-
print "cd ".$SiteConfig->{perl_repo}."\n";
1051-
chdir($SiteConfig->{perl_repo}) or die "Failed to enter perl repo";
1052+
print "cd $perl_build_dir\n";
1053+
chdir($perl_build_dir) or die "Failed to enter perl repo";
10521054
my @onlyextensions = ();
10531055
push @onlyextensions, ("-Donlyextensions= ".join(' ', sort @{$itemconfig->{perl_onlyextensions}}).' ') if(exists $itemconfig->{perl_onlyextensions});
10541056
_command_or_die('sh', 'Configure', @{$itemconfig->{perl_flags}}, @onlyextensions, @{$itemconfig->{perl_extra_flags}}, @_);
@@ -1096,16 +1098,17 @@ sub Build {
10961098
} else {
10971099
-d $SiteConfig->{cosmocc} or die $SiteConfig->{cosmocc} .' is not directory';
10981100
}
1099-
-d $SiteConfig->{perl_repo} or die $SiteConfig->{perl_repo} .' is not directory';
1100-
_install_perl_repo_files($itemconfig, $SiteConfig);
1101-
print "cd ".$SiteConfig->{perl_repo}."\n";
1102-
chdir($SiteConfig->{perl_repo}) or die "Failed to enter perl repo";
1101+
my $perl_build_dir = $UserProjectConfig->{configs}{$CurAPPerlName}{perl_build_dir};
1102+
$perl_build_dir && -d $perl_build_dir or die "$perl_build_dir is not a directory";
1103+
_install_perl_src_files($itemconfig, $perl_build_dir);
1104+
print "cd $perl_build_dir\n";
1105+
chdir($perl_build_dir) or die "Failed to enter perl repo";
11031106
# build using cosmo's zlib to avoid name clashes or including two versions of zlib
11041107
local $ENV{'BUILD_ZLIB'} = 'False' if $itemconfig->{cosmo3};
11051108
local $ENV{'ZLIB_INCLUDE'} = $SiteConfig->{cosmocc} . '/include/third_party/zlib' if $itemconfig->{cosmo3};
11061109
local $ENV{'ZLIB_LIB'} = '' if $itemconfig->{cosmo3};
11071110
_command_or_die('make');
1108-
$PERL_APE = "$SiteConfig->{perl_repo}/perl.com";
1111+
$PERL_APE = "$perl_build_dir/perl.com";
11091112
@perl_config_cmd = ('./perl', '-Ilib');
11101113
}
11111114
else {
@@ -1115,7 +1118,7 @@ sub Build {
11151118

11161119
# prepare for install and pack
11171120
-f $PERL_APE or die "apperlm build: perl ape not found";
1118-
my $OUTPUTDIR = "$UserProjectConfig->{apperl_output}/$CurAPPerlName";
1121+
my $OUTPUTDIR = "$UserProjectConfig->{apperl_output}/$CurAPPerlName/o";
11191122
if(-d $OUTPUTDIR) {
11201123
print "rm -rf $OUTPUTDIR\n";
11211124
remove_tree($OUTPUTDIR);

0 commit comments

Comments
 (0)