Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


Thanks for your reply, Michael :-)
Sorry if this is a dump question but, how to ensure that my install is linked to the dev tree with solenv/bin/linkoo ?

Thanks & Best Regards,
Ta Tung

PS: I also attach my linkoo file :D

On 08/01/2011 06:55 PM, Michael Meeks wrote:
Hi there,

On Thu, 2011-07-28 at 01:09 +0700, Ta Duc Tung wrote:
I've tried to make with debug=t but no change. GDB log still the same :(
Any one please help!
        You need to 'make clean' in sw and then 'make debug=true' - and -then-
you need to ensure that your install is linked to the dev tree with
solenv/bin/linkoo.

        Then you need to re-run gdb, (with ooenv sourced), and you should have
more luck.

        Thanks !

                Michael.


:
    eval 'exec perl -S $0 ${1+"$@"}'
        if 0;

use strict;

#*************************************************************************
#
#    This app makes it easy to link a live build
# set into an install set. Then your devel iteration
# is: 'build', execute.
#
#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# 
# Copyright 2000, 2010 Oracle and/or its affiliates.
#
# OpenOffice.org - a multi-platform office productivity suite
#
# This file is part of OpenOffice.org.
#
# OpenOffice.org is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License version 3
# only, as published by the Free Software Foundation.
#
# OpenOffice.org is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Lesser General Public License version 3 for more details
# (a copy is included in the LICENSE file that accompanied this code).
#
# You should have received a copy of the GNU Lesser General Public License
# version 3 along with OpenOffice.org.  If not, see
# <http://www.openoffice.org/license.html>
# for a copy of the LGPLv3 License.
#
# This file substantially, if not wholely written by volunteers, not Oracle
#
#*************************************************************************

# ends up in program/ooenv
( my $moz_lib = `pkg-config --variable=libdir mozilla-nss` ) =~ tr/\n/:/;
my $env_script = '
java_path=`$thisdir/../basis-link/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/../basis-link/program:$thisdir/../basis-link/ure-link/bin:$PATH"
export GNOME_DISABLE_CRASH_DIALOG=1
export STAR_RESOURCEPATH=$thisdir/../basis-link/program/resource
# debugging assistance
export SAL_DISABLE_FLOATGRAB=1
export G_SLICE=always-malloc
export MALLOC_CHECK_=2
export OOO_DISABLE_RECOVERY=1
export SAL_ALLOW_LINKOO_SYMLINKS=1
';

my $dry_run = 0;
my $usage = 0;
my $LANG;
my $TARGET;
my $LIBVER;
my $OOO_BUILD;
my $OOO_INSTALL;

my $program_dir = 'basis-link/program';
my $brand_program_dir = 'program';
my $ure_misc_dir = 'basis-link/ure-link/share/misc';
my $ure_java_dir = 'basis-link/ure-link/share/java';
my $ure_lib_dir = 'basis-link/ure-link/lib';

$program_dir = 'openoffice.org/basis-link/MacOS' if ($ENV{OS} eq 'MACOSX'); # FIXME probably wrong

my @exceptions = ( 'cppuhelper', 'sunjavaplugin', 'libjvmfwk' );

my $dllre = '\.so$';
$dllre = '\.dylib$' if ($ENV{OS} eq 'MACOSX');

my %replaceable = (
    $program_dir => "($dllre|\.rdb)",
    $ure_lib_dir => "$dllre",
    $program_dir . '/resource' => '\.res$',
    $program_dir . '/classes' => '\.jar$',
    'basis-link/share/config' => '\.zip$',
    'ure/share/misc' => '\.rdb'
#    'share/uno_packages' => '\.zip$'
);

my @search_dirs = ( 'lib', 'bin', 'class' );

my @known_duplicates = ( 'db.jar', 'libi18n' );

sub sniff_target($)
{
    my $build_dir = shift;
    my ($dirhandle, $fname);
    my ($target, $libver, $lang) = ( 'unxlngi6.pro', '680', 'en-US' ); # defaults

    opendir ($dirhandle, $build_dir) || die "Can't open $build_dir";
    while ($fname = readdir ($dirhandle)) {
        $fname =~ /Set.sh$/ || next;

        my $file;
        open ($file, "$build_dir/$fname") || die "Can't open $build_dir/$fname";
        while (<$file>) {
            /\s*(\S+)\s*=\s*\"(\S+)\"/ || next;
            if ($1 eq 'INPATH') {
                $target = $2;
            }
            if ($1 eq 'UPD') {
                $libver = $2;
            }
        }
        close ($file);
    }

    closedir ($dirhandle);

    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 (-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: $!";
                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 {
        check_create_linked ($dest);
        if (!$dry_run) {
            # move / write the link
            rename ("$dest/$dest_name", "$dest/linked/$dest_name") ||
                defined $dont_check_link || die "Failed rename of $dest/$dest_name: $!";

            symlink ("$src/$src_name", "$dest/$dest_name") || die "Failed to symlink: $!";
            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) = @_;

    for my $elem (@search_dirs) {
        my $dirh_module;
        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 scan_and_link_files($$$)
{
    my $build_path = shift;
    my $installed_files = 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,
        my $test = "$build_path/$subdir/$target";
        -d $test || next;
        push @modules, $test;
    }
    closedir ($dirh_toplevel);

    # 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
    my $upd = 300;
    $upd = $ENV{UPD} if (defined $ENV{UPD});
    scan_one_dir ($installed_files, \%build_files, "$build_path/solver/$upd/$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";

    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 link_iso_res()
{
    print "Special iso.res case: ";
    my $ooo_res="$OOO_INSTALL/" . $brand_program_dir . "/resource/ooo".$LIBVER.$LANG.".res";
    my $star_res="$OOO_INSTALL/" . $brand_program_dir . "/resource/iso".$LIBVER.$LANG.".res";
    if (-l $ooo_res && -l $star_res) {
        if ($dry_run) {
            print "link $ooo_res to $star_res";
        } else {
            unlink ($star_res);
            symlink ($ooo_res, $star_res);
            print "clobbered";
        }
    }
    print "\n";
}

sub link_pagein_files()
{
    print "pagein case:";
    my $src  = "$OOO_BUILD/desktop/$TARGET/misc";
    my $dest = "$OOO_INSTALL/" . $program_dir;
    for my $c ('calc', 'draw', 'impress', 'writer', 'common') {
        do_link ($src, $dest, "pagein-$c", "pagein-$c");
    }
    print "\n";
}

for my $a (@ARGV) {

# options
    if ($a =~ /--dry-run/) {
        $dry_run = 1;
    } elsif (($a eq '--help') || ($a eq '-h')) {
        $usage = 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]\n";
    exit (1);
}

substr ($OOO_INSTALL, 0, 1) eq '/' || die "linkoo requires absolute paths ($OOO_INSTALL does not 
qualify)";
substr ($OOO_BUILD, 0, 1)   eq '/' || 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";
-d "$OOO_INSTALL/" . $program_dir . "/resource" || die "$OOO_INSTALL doesn't look like an OO 
install";

($TARGET, $LIBVER, $LANG) = sniff_target ($OOO_BUILD);

evilness ('undo');

my $installed_files = build_installed_list ($OOO_INSTALL);

scan_and_link_files ($OOO_BUILD, $installed_files, $TARGET);
link_iso_res();
link_pagein_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;
    print $ooenv "# testtool\nexport SRC_ROOT=$OOO_BUILD\n";
    close ($ooenv);
}

evilness ('do');

print "\nlinkoo finished, please don't forget to source ooenv before ./soffice.\n";

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.