goodbye linkoo.. you have served well

This commit:
- removes linkoo and --disable-linkoo option
- removes 'dev-update' make target
- creates --disable-ooenv option
- removes LD_LIBRARY_PATH and PATH settings in ooenv

Change-Id: I9530558531e9cb58b8282754ec8a6c655f190480
This commit is contained in:
Matúš Kukan 2013-09-17 13:56:12 +02:00
parent bb15aeb0bb
commit f5b840a3ee
9 changed files with 19 additions and 660 deletions

View File

@ -271,7 +271,6 @@ dev-install: build
ifeq ($(OS_FOR_BUILD),WNT)
cd $(SRCDIR)/instsetoo_native && $(GNUMAKE) LIBO_DEV_INSTALL=TRUE $(GMAKE_OPTIONS)
else
ifeq ($(DISABLE_LINKOO),TRUE)
@ooinstall $(DEVINSTALLDIR)/opt
ifneq ($(MACOSX_CODESIGNING_IDENTITY),)
@macosx-codesign-app-bundle $(DEVINSTALLDIR)/opt/LibreOffice.app
@ -279,9 +278,6 @@ endif
ifneq ($(OS),MACOSX)
@install-gdb-printers -L
endif
else
@ooinstall -l $(DEVINSTALLDIR)/opt
endif
endif
@rm -f $(BUILDDIR)/install && ln -s $(DEVINSTALLDIR)/opt/ $(BUILDDIR)/install
@echo
@ -305,14 +301,6 @@ endif
dev-install-nocheck: build-nocheck
$(MAKE) dev-install -o build
# FIXME: shouldn't linkoo be BUILDDIR vs SRCDIR aware ?
dev-update:
ifeq ($(DISABLE_LINKOO),TRUE)
@linkoo --copy $(DEVINSTALLDIR)/opt $(SRCDIR)
else
@linkoo $(DEVINSTALLDIR)/opt $(SRCDIR)
endif
install-tb:
@rm -rf $(DEVINSTALLDIR)
@mkdir $(DEVINSTALLDIR)

View File

@ -193,11 +193,6 @@ http://www.winehq.org/docs/wineusr-guide/environment-variables, and add
Z:\tmp\LibO-Dev_4.1.0.0.alpha0_Win_x86_archive/LOdev\ 4.1\URE\bin
to "Path" in My Computer->HKEY_CURRENT_USER->Environment.
Then run linkoo, so that when you rebuild something, you can directly see the
changes the next time you run it:
solenv/bin/linkoo '/tmp/LibO-Dev_4.1.0.0.alpha0_Win_x86_archive/LOdev\ 4.1' <your_clone_dir>
And start debugging:
$ winedbg soffice.bin
@ -422,7 +417,6 @@ CC=<path-to-arm-linux-gnueabihf-gcc> --sysroot=<path-to-raspbian_rootfs>
CXX=<path-to-arm-linux-gnueabihf-g++> --sysroot=<path-to-raspbian_rootfs>
--build=x86_64-unknown-linux-gnu
--host=arm-unknown-linux-gnueabihf
--disable-linkoo
--without-doxygen
--disable-gnome-vfs
--enable-python=system

View File

@ -95,7 +95,6 @@ export DISABLE_CVE_TESTS=@DISABLE_CVE_TESTS@
export DISABLE_DBCONNECTIVITY=@DISABLE_DBCONNECTIVITY@
export DISABLE_DYNLOADING=@DISABLE_DYNLOADING@
export DISABLE_EXPORT=@DISABLE_EXPORT@
export DISABLE_LINKOO=@DISABLE_LINKOO@
export DISABLE_NEON=@DISABLE_NEON@
export DISABLE_OPENSSL=@DISABLE_OPENSSL@
export DISABLE_PYTHON=@DISABLE_PYTHON@
@ -145,6 +144,7 @@ export ENABLE_MARIADBC=@ENABLE_MARIADBC@
export ENABLE_NPAPI_FROM_BROWSER=@ENABLE_NPAPI_FROM_BROWSER@
export ENABLE_NPAPI_INTO_BROWSER=@ENABLE_NPAPI_INTO_BROWSER@
export ENABLE_ONLINE_UPDATE=@ENABLE_ONLINE_UPDATE@
export ENABLE_OOENV=@ENABLE_OOENV@
export ENABLE_OPENGL=@ENABLE_OPENGL@
export ENABLE_OPENCL=@ENABLE_OPENCL@
export ENABLE_PACKAGEKIT=@ENABLE_PACKAGEKIT@

View File

@ -848,9 +848,9 @@ AC_ARG_ENABLE(compiler-plugins,
[Enable compiler plugins that will perform additional checks during
building. Enabled automatically by --enable-dbgutil.]))
AC_ARG_ENABLE(linkoo,
AS_HELP_STRING([--disable-linkoo],
[Disable linkoo for the smoketest installation.]))
AC_ARG_ENABLE(ooenv,
AS_HELP_STRING([--disable-ooenv],
[Disable ooenv for the instdir installation.]))
AC_ARG_ENABLE(lto,
AS_HELP_STRING([--enable-lto],
@ -4601,21 +4601,18 @@ else
fi
AC_SUBST(ASSERT_ALWAYS_ABORT)
dnl Determine whether to use linkoo for the smoketest installation
dnl ===================================================================
AC_MSG_CHECKING([whether to use linkoo for the smoketest installation])
if test $_os = Darwin; then
enable_linkoo=no
# Determine whether to use ooenv for the instdir installation
# ===================================================================
if test $_os != "WINNT" -a $_os != "Darwin"; then
AC_MSG_CHECKING([whether to use ooenv for the instdir installation])
if test "$enable_ooenv" = "no"; then
AC_MSG_RESULT([no])
else
ENABLE_OOENV="TRUE"
AC_MSG_RESULT([yes])
fi
fi
if test "$enable_linkoo" = "no"; then
DISABLE_LINKOO="TRUE"
AC_MSG_RESULT([no])
else
DISABLE_LINKOO=
AC_MSG_RESULT([yes])
fi
AC_SUBST(DISABLE_LINKOO)
AC_SUBST(ENABLE_OOENV)
if test "$enable_headless" = "yes"; then
# be sure to do not mess with uneeded stuff

View File

@ -12,7 +12,7 @@ $(eval $(call gb_CustomTarget_CustomTarget,instsetoo_native/setup))
$(eval $(call gb_CustomTarget_register_targets,instsetoo_native/setup,\
$(call gb_Helper_get_rcfile,bootstrap) \
$(call gb_Helper_get_rcfile,fundamental) \
ooenv \
$(if $(ENABLE_OOENV),ooenv) \
$(if $(filter TRUE,$(DISABLE_PYTHON)),,$(call gb_Helper_get_rcfile,pythonloader.uno)) \
$(call gb_Helper_get_rcfile,uno) \
$(call gb_Helper_get_rcfile,version) \
@ -69,11 +69,7 @@ $(call gb_CustomTarget_get_workdir,instsetoo_native/setup)/$(call gb_Helper_get_
$(call gb_CustomTarget_get_workdir,instsetoo_native/setup)/ooenv :
$(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),ECH,1)
( \
echo 'java_path=`$(gb_INSTROOT)/ure/bin/javaldx 2>/dev/null`' && \
echo 'export LD_LIBRARY_PATH="$(gb_INSTROOT)/program:$$java_path$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH}"' && \
echo 'ulimit -c unlimited' && \
echo 'export PATH="$(gb_INSTROOT)/program:$(gb_INSTROOT)/ure/bin:$$PATH"' && \
echo 'export GNOME_DISABLE_CRASH_DIALOG=1' && \
echo '# debugging assistance' && \
echo 'export SAL_DISABLE_FLOATGRAB=1' && \
echo 'export G_SLICE=always-malloc' && \

View File

@ -14,7 +14,7 @@ $(eval $(call gb_Package_set_outdir,instsetoo_native_setup,$(gb_INSTROOT)))
$(eval $(call gb_Package_add_files,instsetoo_native_setup,$(gb_PROGRAMDIRNAME),\
$(call gb_Helper_get_rcfile,bootstrap) \
$(call gb_Helper_get_rcfile,fundamental) \
ooenv \
$(if $(ENABLE_OOENV),ooenv) \
$(if $(filter TRUE,$(DISABLE_PYTHON)),,$(call gb_Helper_get_rcfile,pythonloader.uno)) \
$(call gb_Helper_get_rcfile,uno) \
$(call gb_Helper_get_rcfile,version) \

View File

@ -15,11 +15,6 @@ bin/
the scp2/ module to create an installer, and/or to
do a local install for the smoketest.
linkoo
creates a forest of symlinks inside an install such
that a developer can re-compile in the source tree,
and re-run without re-installing (on Unix at least)
gbuild/
the (shiny new) gnumake build makefile fragments we are
migrating the codebase to use.

View File

@ -1,602 +0,0 @@
:
eval 'exec perl -S $0 ${1+"$@"}'
if 0;
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This file incorporates work covered by the following license notice:
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed
# with this work for additional information regarding copyright
# ownership. The ASF licenses this file to you under the Apache
# License, Version 2.0 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
#
#*************************************************************************
#
# This app makes it easy to link a live build
# set into an install set. Then your devel iteration
# is: 'build', execute.
#
#*************************************************************************
use strict;
use File::stat;
use File::Copy;
use File::Find;
use File::Spec::Functions qw[splitdir catdir];
# ends up in program/ooenv
( my $moz_lib = `pkg-config --variable=libdir mozilla-nss` ) =~ tr/\n/:/;
my $env_script = '
java_path=`$thisdir/../ure-link/bin/javaldx 2>/dev/null`
export LD_LIBRARY_PATH="$thisdir:$java_path:' . $moz_lib . '$LD_LIBRARY_PATH"
ulimit -c unlimited
export PATH="$thisdir:$thisdir/../ure-link/bin:$PATH"
export GNOME_DISABLE_CRASH_DIALOG=1
# debugging assistance
export SAL_DISABLE_FLOATGRAB=1
export G_SLICE=always-malloc
export MALLOC_CHECK_=2
export MALLOC_PERTURB_=153
export OOO_DISABLE_RECOVERY=1
export SAL_ALLOW_LINKOO_SYMLINKS=1
';
my $dry_run = 0;
my $backup = 0;
my $copy = 0;
my $usage = 0;
my $windows = 0;
my $LANG;
my $TARGET;
my $LIBVER;
my $OOO_BUILD;
my $OOO_INSTALL;
my $SOLARVER;
if ($ENV{'OS'} eq 'MACOSX') {
print "FIXME: linkoo currently does not work on Mac OS X\n";
exit(0);
}
# process options
for my $a (@ARGV) {
# options
if ($a =~ /--dry-run/) {
$dry_run = 1;
} elsif (($a eq '--help') || ($a eq '-h')) {
$usage = 1;
} elsif ($a eq '--backup') {
$backup = 1;
} elsif ($a eq '--copy') {
$copy = 1;
# ordered arguments
} elsif (!defined $OOO_INSTALL) {
$OOO_INSTALL = $a;
} elsif (!defined $OOO_BUILD) {
$OOO_BUILD = $a;
} else {
print "Unknown argument '$a'\n";
$usage = 1;
}
}
if (!defined $OOO_BUILD && defined $ENV{SRC_ROOT}) {
$OOO_BUILD = $ENV{SRC_ROOT};
}
if ($usage || !defined $OOO_INSTALL || !defined $OOO_BUILD) {
printf "Usage: linkoo </path/to/ooo/install> [</path/to/ooo/build/tree>] [--dry-run] [--backup] [--copy]\n";
exit (1);
}
File::Spec->file_name_is_absolute($OOO_INSTALL) || die "linkoo requires absolute paths ($OOO_INSTALL does not qualify)";
File::Spec->file_name_is_absolute($OOO_BUILD) || die "linkoo requires absolute paths ($OOO_BUILD does not qualify)";
-d $OOO_INSTALL || die "No such directory $OOO_INSTALL";
-w $OOO_INSTALL || die "You need write access to $OOO_INSTALL";
-d $OOO_BUILD || die "No such directory $OOO_BUILD";
($TARGET, $LIBVER, $LANG) = sniff_target ($OOO_BUILD);
$SOLARVER = "$OOO_BUILD/solver";
if ($TARGET =~ /^wntgcci/ || $TARGET =~ /^wntgccx/ || $TARGET =~ /^wntmsci[0-9]+/|| $TARGET =~ /^wntmscx[0-9]+/) {
$windows = 1;
}
if ($TARGET =~ /^wntmsci[0-9]+/ || $TARGET =~ /^wntmscx[0-9]+/) {
# wntgcci means are cross-compiling & can symlink, so copy only on real
# Windows
$copy = 1;
}
# setup global variables
my $brand_program_dir = 'program';
my $ure_lib_dir = 'ure-link/lib';
my $win_ure_lib_dir = 'URE/bin';
my @exceptions = ( 'libsunjavaplugin', 'libjvmfwk' );
push @exceptions, 'cppuhelper' if (!$windows);
my $bin;
$bin = "|\\.bin" if ($windows);
my %replaceable = (
$brand_program_dir => "(\\.so|\\.dll|\\.exe|\\.com$bin)\$",
$ure_lib_dir => "(\\.so\$|\\.so\\.3\$)",
$win_ure_lib_dir => "(\\.dll|\\.exe|\\.bin|\\.com)\$",
$brand_program_dir . '/resource' => '\.res$',
$brand_program_dir . '/classes' => '\.jar$',
'ure-link/share/java' => '\.jar$',
'share/extensions/nlpsolver' => '\.jar$',
'share/extensions/wiki-publisher' => '\.jar$',
'share/extensions/pdf-import' => "(\\.so|\\.dll|\\.exe|\\.com$bin)\$",
'share/extensions/presenter-screen' => "(\\.so|\\.dll|\\.exe|\\.com$bin)\$",
'share/extensions/presentation-minimizer' => "(\\.so|\\.dll|\\.exe|\\.com$bin)\$",
'share/config' => '\.zip$',
# 'share/uno_packages' => '\.zip$'
);
my @instdir_replaceable = (
'share',
'program',
# 'presets', # leave these guys alone for now
'help',
);
my @search_dirs = ( 'lib', 'bin', 'class' );
my @known_duplicates = ( 'db.jar', 'libi18n', 'libnssckbi', 'libnssdbm', 'libsqlite3', 'libnssutil3', 'pythonloader.uno', 'pyuno', 'libpyuno' );
sub sniff_target($)
{
my $build_dir = shift;
my ($target, $libver, $lang) = ( 'unxlngi6.pro', '680', 'en-US' ); # defaults
chomp($target=`cat $build_dir/config_host.mk | grep INPATH= | sed -e 's/.*=//' | sed -e 's/"//g'`);
chomp($libver=`cat $build_dir/config_host.mk | grep UPD= | sed -e 's/.*=//' | sed -e 's/"//g'`);
print "Sniffed target: $target, $libver\n";
return ($target, $libver, $lang);
}
sub build_installed_list($)
{
my $path = shift;
my %files = ();
for my $suffix (keys %replaceable) {
my $dirname = "$path/$suffix";
my $dirhandle;
my $pattern = $replaceable{$suffix};
if (opendir ($dirhandle, $dirname)) {
while (my $fname = readdir ($dirhandle)) {
$fname =~ m/$pattern/ || next;
my $skip = 0;
for $pattern (@exceptions) {
$fname =~ /$pattern/ || next;
$skip = 1;
}
$files{$fname} = $dirname if !$skip;
}
closedir ($dirhandle);
} else {
print "Couldn't find '$dirname': skipping\n";
}
}
return \%files;
}
sub check_create_linked($)
{
my $path = shift;
my $linked_dir = "$path/linked";
if (! -d $linked_dir) {
mkdir $linked_dir || die "Can't make $linked_dir: $!";
}
}
sub do_link($$$$@)
{
my $src = shift;
my $dest = shift;
my $src_name = shift;
my $dest_name = shift;
my $dont_check_link = shift;
if ($dest_name eq 'soffice' ||
$dest_name eq 'unopkg' ||
$dest_name eq 'unoinfo' ||
$dest_name eq 'spadmin' ||
$dest_name eq 'gengal' ||
$dest_name eq 'python')
{ return; } # these scripts uses `pwd`...
if ($copy) { # copy if older ...
my $src_mtime = stat("$src/$src_name")->mtime;
my $dest_mtime = stat("$dest/$dest_name")->mtime;
if ($src_mtime > $dest_mtime) {
# print " copy $src/$src_name ($src_mtime) -> $dest/$dest_name ($dest_mtime)\n";
print " copy $src/$src_name -> $dest/$dest_name\n";
unlink ("$dest/$dest_name");
copy("$src/$src_name", "$dest/$dest_name") || die "Failed top copy: $!";
} else {
# print " up-to-date $src/$src_name -> $dest/$dest_name\n";
}
} elsif (-l "$dest/$dest_name" ) {
my $link = readlink ("$dest/$dest_name");
if ($link =~ /^\//) { # Absolute path
if (!$dry_run) {
# re-write the link
unlink ("$dest/$dest_name");
symlink ("$src/$src_name", "$dest/$dest_name") || die "Failed to symlink $src/$src_name: $!";
print " [$dest_name]";
} else {
print "re-make link $src/$src_name => $dest/$dest_name\n";
}
} elsif ($dry_run) {
print "skipping symbolic link $dest/$dest_name -> $link\n";
}
} else {
if (!$dry_run) {
# move / write the link
if ($backup) {
check_create_linked ($dest);
rename ("$dest/$dest_name", "$dest/linked/$dest_name") ||
defined $dont_check_link || die "Failed rename of $dest/$dest_name: $!";
} else {
unlink ("$dest/$dest_name") ||
defined $dont_check_link || die "Failed remove of $dest/$dest_name: $!";
}
symlink ("$src/$src_name", "$dest/$dest_name") || die "Failed to symlink $src/$src_name: $!";
print " $dest_name";
} else {
print "move / symlink $src/$src_name => $dest/$dest_name\n";
}
}
}
sub scan_one_dir($$$$)
{
my ($installed_files, $build_files, $path, $solver) = @_;
my $dirh_module;
if (!$solver) {
if (opendir ($dirh_module, "$path/..")) {
while (my $file = readdir ($dirh_module)) {
if ($file =~ /Library_.*\.mk/) {
if (-d $path) {
print STDERR "gnu-makeified module contains stale output dir '$path', renaming it away\n";
rename ($path, "$path.obsolete"); # if it fails, nevermind ...
}
return;
}
}
closedir ($dirh_module);
}
}
for my $elem (@search_dirs) {
my $module_path = "$path/$elem";
if (opendir ($dirh_module, $module_path)) {
while (my $file = readdir ($dirh_module)) {
if (defined $installed_files->{$file}) {
if (defined $build_files->{$file}) {
my $known = 0;
for my $regexp (@known_duplicates) {
if ($file =~ m/$regexp/) {
$known = 1;
}
}
if (!$known && !$solver) {
print STDERR "\nlinkoo:: Unknown duplicate file '$file' in: '" .
$build_files->{$file} . "' vs '" .
$module_path . "' in module $path\n";
exit (1);
}
} else {
$build_files->{$file} = $module_path;
}
}
}
}
closedir ($dirh_module);
}
}
sub get_modules($$)
{
my $build_path = shift;
my $target = shift;
my @modules = ();
my $dirh_toplevel;
opendir ($dirh_toplevel, $build_path) || die "Can't open '$build_path': $!";
while ( my $subdir = readdir ($dirh_toplevel) )
{
$subdir =~ m/\./ && next; # eg. vcl.old,
$subdir eq 'solver' && next; # skip solver dir itself
my $test = "$build_path/$subdir/$target";
-d $test || next;
push @modules, $test;
}
closedir ($dirh_toplevel);
return \@modules;
}
sub scan_and_link_files($$$)
{
my $build_path = shift;
my $installed_files = shift;
my $target = shift;
my @modules = get_modules( $build_path, $target );
# Scan the old-style module/$target/lib directories ...
my %build_files;
for my $module (@modules) {
scan_one_dir ($installed_files, \%build_files, $module, 0);
}
# Now scan the solver
scan_one_dir ($installed_files, \%build_files, "$SOLARVER/$target", 1);
for my $file (keys %build_files) {
my $src = $build_files{$file};
my $dest = $installed_files->{$file};
do_link ($src, $dest, $file, $file);
}
print "\n";
}
sub evilness($)
{
my $doit = shift;
my $name = 'librecentfile.so';
my $src = "$OOO_BUILD/shell/$TARGET/lib/$name";
my $dest = "$OOO_BUILD/sfx2/$TARGET/lib/$name";
return if ($windows);
if ($doit eq 'undo') {
if (-l $dest) {
print " unlink $name\n";
unlink $dest;
}
} else {
$doit eq 'do' || die;
if (-f $src) {
print " link $name\n";
symlink $src, $dest;
}
}
}
sub do_link_gdb_py($$$)
{
my $srcdir = shift;
my $libdir = shift;
my $loader = shift;
my $lib = $loader =~ s/-gdb.py$//;
my $destdir = $libdir;
# Autoloader for a library is looked for in the same directory the library
# is (the library, not a symlink to it). Therefore it does not help to link
# it from solver into install, because there is only a symlink in install
# anyway. Instead, we must follow the link.
if (-l "$libdir/$lib") {
$destdir = readlink ("$libdir/$lib");
$destdir =~ s@/[^/]*$@@;
}
if ($destdir ne $srcdir) {
do_link ($srcdir, $destdir, $loader, $loader, 1);
}
}
sub link_gdb_py()
{
return if ($windows);
print "Special gdb.py helpers case: ";
my $dirh;
my @basis;
my @ure;
my $src = "$SOLARVER/$TARGET/lib";
opendir ($dirh, $src) || die "can't open solver: $src: $!";
while (my $dent = readdir ($dirh)) {
$dent =~ /^\./ && next;
$dent =~ /\-gdb\.py/ || next;
if ($dent =~ /uno/) {
push @ure, $dent;
} else {
push @basis, $dent;
}
}
closedir ($dirh);
if (@ure < 1 || @basis < 1) {
print STDERR "Warning: missing helpful python debug helpers\n";
} else {
for my $c (@basis) {
do_link_gdb_py ($src, "$OOO_INSTALL/program", $c);
}
for my $c (@ure) {
do_link_gdb_py ($src, "$OOO_INSTALL/ure/lib", $c);
}
}
print "\n";
}
sub link_pagein_files()
{
return if ($windows);
print "pagein case:";
my $src = "$SOLARVER/$TARGET/bin";
my $dest = "$OOO_INSTALL/" . $brand_program_dir;
for my $c ('calc', 'draw', 'impress', 'writer', 'common') {
do_link ($src, $dest, "pagein-$c", "pagein-$c");
}
print "\n";
}
sub link_ui_files()
{
# First find all the en-US .ui files installed
my @files = ();
find( sub
{
if ( $File::Find::dir !~ /\/res\// && $_ =~ /\.ui$/ )
{
push( @files, $File::Find::name );
}
}, "$OOO_INSTALL/" );
my @modules = get_modules( $OOO_BUILD, $TARGET );
print "ui case:";
# Search the files in the source tree
for my $dest ( @files )
{
my @dest_dirs = splitdir( $dest );
my $module_dir = @dest_dirs[-3];
my $name = @dest_dirs[-1];
my $nb_dirs = @dest_dirs - 2;
my $dest_dir = catdir( @dest_dirs[0..$nb_dirs] );
# Find out the file to link to in the source tree
my $modulepath = "";
my $nb_segments = 3;
if ( $dest =~ /\/modules\// )
{
# Handle the modules/* cases
if ( $module_dir =~ /^sw/ || $module_dir eq "sglobal" ) { $modulepath = "sw/uiconfig"; }
elsif ( $module_dir eq "smath" ) { $modulepath = "starmath/uiconfig"; }
elsif ( $module_dir eq "simpress" || $module_dir eq "sdraw" ) { $modulepath = "sd/uiconfig"; }
elsif ( $module_dir eq "scalc" ) { $modulepath = "sc/uiconfig"; }
elsif ( $module_dir =~ /^db/ ) { $modulepath = "dbaccess/uiconfig"; }
elsif ( $module_dir eq "BasicIDE" ) { $modulepath = "basctl/uiconfig/basicide"; $nb_segments = 2; }
elsif ( $module_dir eq "schart" ) { $modulepath = "chart2/uiconfig"; $nb_segments = 2; }
elsif ( $module_dir eq "tubes" ) { $modulepath = "tubes/uiconfig"; }
elsif ( $module_dir eq "StartModule" ) { $modulepath = "framework/uiconfig/startmodule"; $nb_segments = 2; }
}
else
{
$nb_segments = 2;
# Handle the <module>/ui/ cases
my $module = $module_dir;
if ( $module_dir eq "sfx" ) { $module = "sfx2"; }
elsif ( $module_dir eq "svt" ) { $module = "svtools"; }
elsif ( $module_dir eq "sw" ) { $module = "sw"; $nb_segments = 3; }
elsif ( $module_dir eq "spa" ) { $module = "padmin"; }
elsif ( $module_dir eq "xmlsec" ) { $module = "xmlsecurity"; }
$modulepath = "$module/uiconfig";
}
my $subpath = catdir( @dest_dirs[-$nb_segments..-2] );
my $src_dir = "$OOO_BUILD/$modulepath/$subpath";
# print STDERR "$module_dir : $modulepath : '$src_dir/$name'\n";
if ( -e "$src_dir/$name" )
{
do_link ( $src_dir, $dest_dir, $name, $name );
}
}
print "\n";
}
sub link_rdb_files()
{
print "linking rdb:";
my $src_prefix = "$SOLARVER/$TARGET/";
my $dest_prefix = "$OOO_INSTALL/";
do_link ($src_prefix . "xml" , $dest_prefix . $brand_program_dir . "/services", "services.rdb", "services.rdb");
do_link ($src_prefix . "xml/ure" , $dest_prefix . "ure/share/misc", "services.rdb", "services.rdb");
do_link ($src_prefix . "bin" , $dest_prefix . "ure/share/misc", "udkapi.rdb", "types.rdb");
print "\n";
}
# instdir is an internal directory in the build tree
# installdir is the directory we installed into.
sub do_recursive_link($$)
{
my ($instdir, $installdir) = @_;
(-d $installdir && -d $instdir) || die "not directories";
my $dirhandle;
if (opendir ($dirhandle, $instdir)) {
while (my $fname = readdir ($dirhandle)) {
$fname =~ /^\./ && next;
if (-d "$instdir/$fname") {
if (-d "$installdir/$fname") {
do_recursive_link("$instdir/$fname", "$installdir/$fname");
} else {
print STDERR "mismatching directories $instdir/$fname vs. $installdir/$fname\n";
}
} elsif (-f "$installdir/$fname") {
do_link ($instdir, $installdir, $fname, $fname, 0);
} else {
print STDERR "Warning: odd file type for $instdir/$fname\n";
}
}
} else {
print STDERR "Couldn't scan '$instdir': $!";
}
}
sub link_instdir($$)
{
my ($instdir, $installdir) = @_;
print "linking instdir ...\n";
for my $dir (@instdir_replaceable) {
# include target ...
do_recursive_link("$instdir/$dir", "$installdir/$dir");
}
}
evilness ('undo');
my $installed_files = build_installed_list ($OOO_INSTALL);
scan_and_link_files ($OOO_BUILD, $installed_files, $TARGET);
link_instdir("$OOO_BUILD/instdir/$TARGET", $OOO_INSTALL);
link_gdb_py();
link_pagein_files();
link_ui_files();
link_rdb_files();
if (!-f "$OOO_INSTALL/" . $brand_program_dir . "/ooenv") {
my $ooenv;
print "Creating '$OOO_INSTALL/", $brand_program_dir, "/ooenv'\n";
open ($ooenv, ">$OOO_INSTALL/" . $brand_program_dir . "/ooenv") || die "Can't open $OOO_INSTALL/" . $brand_program_dir . "/ooenv: $!";
print $ooenv "thisdir=$OOO_INSTALL/" . $brand_program_dir . "/\n";
print $ooenv $env_script;
close ($ooenv);
}
evilness ('do');
print "\nlinkoo finished\n";
# vim:set shiftwidth=4 softtabstop=4 expandtab:

View File

@ -20,7 +20,6 @@ use Cwd;
$path = '';
$strip = '';
$do_link = 0;
$is_windows = 0;
my $tmp_dir;
@ -45,9 +44,7 @@ if ($ENV{'SYSTEM_MOZILLA'} eq 'YES') {
$ENV{'PYTHONPATH'} = "$ENV{'SRC_ROOT'}/instsetoo_native/$ENV{'INPATH'}/bin:$ENV{'SOLARVERSION'}/$ENV{'INPATH'}/lib:$ENV{'SOLARVERSION'}/$ENV{'INPATH'}/lib/python:$ENV{'SOLARVERSION'}/$ENV{'INPATH'}/lib/python/lib-dynload";
for $arg (@ARGV) {
if ($arg eq '-l' || $arg eq '--link') {
$do_link = 1;
} elsif ($arg eq '-s' || $arg eq '--strip') {
if ($arg eq '-s' || $arg eq '--strip') {
$strip = "-strip";
} elsif ($arg eq '-h' || $arg eq '--help') {
$help = 1;
@ -61,8 +58,7 @@ for $arg (@ARGV) {
$help = 1 if $path eq '';
if ($help) {
print "ooinstall [-l] [-s] <prefix to install to>\n";
print " -l/--link - performs a linkoo on the installed source\n";
print "ooinstall [-s] <prefix to install to>\n";
print " -s/--strip - strip the installed binaries\n";
exit 1;
}
@ -121,11 +117,6 @@ if ($ENV{BUILD_TYPE} =~ m/ODK/) {
}
print "Installer finished\n";
if ($do_link && !$is_windows) {
system("$ENV{SOLARENV}/bin/linkoo $path $ENV{BUILDDIR}") &&
die "linkoo failed: $!";
}
# Local Variables:
# cperl-indent-level: 4
# indent-tabs-mode: nil