Guys,

I'd like to revive this patch which I posted a while back, but has needed bringing up to date due to subsequent changes.

It has a few key intentions:

 * Makes libparrot.so a 'first class citizen'
* Allows the installed version of parrot and its utilities to be either shared or static * The decision to build libparrot.[a/so] is a configure step which can be overridden by hints and --ask (should a command-line option work? I couldn't make this work)

Some comments:

* Although a Configuration step, the type of build can be altered manually by changing the LIBPARROT target in the Makefile. * I use rpath for the devel targets to find the shared library; not sure how portable this is (we can have a configure test for this, and if it isn't supported, suggest that they set LD_LIBRARY_PATH manually) * Some make targets have been changed, added or removed; e.g. Removed: shared/static/world_shared/parrot_utils_shared. Added: installable

At the moment libparrot.so doesn't sit nicely and although some work was done to make parrot build with a shared library for the debian build, it isn't as general as it could be.

I'd initially appreciate some feedback, and particularly reports of breakage.

* I know that the debian automatic build will have broken because I am currently dropping the version number
   (I shall incorporate this, but in a more general manner)

* I have only tried this on Linux, but no Windows builds (I've changed the files, but may have overlooked important changes)

* I'm going to check 'make install' -- it needs updating to distribute the installable utilities and check that things work in both configurations.

All tests (as far as I can see) pass with shared and static on Linux.

Cheers,

Nick

Index: debian/rules
===================================================================
--- debian/rules        (revision 10619)
+++ debian/rules        (working copy)
@@ -23,7 +23,7 @@
 
 build-stamp: configure-stamp 
        dh_testdir
-       $(MAKE) world_shared
+       $(MAKE) installable
        pod2man --section=1 --release="Debian Project" --center="Debian 
GNU/Linux manual" docs/running.pod debian/parrot.1
        pod2man --section=1 --release="Debian Project" --center="Debian 
GNU/Linux manual" parrot-config.imc debian/parrot-config.imc.1
        pod2man --section=1 --release="Debian Project" --center="Debian 
GNU/Linux manual" src/pdump.c debian/pdump.1
@@ -50,11 +50,11 @@
        dh_installdirs -plibparrot-dev usr/share/lintian/overrides
        $(MAKE) install PREFIX=$(CURDIR)/debian/tmp/usr
        dh_install --sourcedir=$(CURDIR)/debian/tmp --list-missing
-       install -m755 $(CURDIR)/debian/tmp/usr/bin/pdump_shared 
$(CURDIR)/debian/parrot/usr/bin/pdump
-       install -m755 $(CURDIR)/debian/tmp/usr/bin/pdb_shared 
$(CURDIR)/debian/parrot/usr/bin/parrot-debugger
-       install -m755 $(CURDIR)/debian/tmp/usr/bin/pbc_info_shared 
$(CURDIR)/debian/parrot/usr/bin/pbc_info
-       install -m755 $(CURDIR)/debian/tmp/usr/bin/pbc_merge_shared 
$(CURDIR)/debian/parrot/usr/bin/pbc_merge
-       install -m755 $(CURDIR)/debian/tmp/usr/bin/disassemble_shared 
$(CURDIR)/debian/parrot/usr/bin/disassemble
+       install -m755 $(CURDIR)/debian/tmp/usr/bin/installable_pdump 
$(CURDIR)/debian/parrot/usr/bin/pdump
+       install -m755 $(CURDIR)/debian/tmp/usr/bin/installable_pdb 
$(CURDIR)/debian/parrot/usr/bin/parrot-debugger
+       install -m755 $(CURDIR)/debian/tmp/usr/bin/installable_pbc_info 
$(CURDIR)/debian/parrot/usr/bin/pbc_info
+       install -m755 $(CURDIR)/debian/tmp/usr/bin/installable_pbc_merge 
$(CURDIR)/debian/parrot/usr/bin/pbc_merge
+       install -m755 $(CURDIR)/debian/tmp/usr/bin/installable_disassemble 
$(CURDIR)/debian/parrot/usr/bin/disassemble
        install -m644 debian/libparrot-dev.lintian-overrides 
$(CURDIR)/debian/libparrot-dev/usr/share/lintian/overrides/libparrot-dev
 
 # Build architecture-independent files here.
Index: lib/Parrot/Test.pm
===================================================================
--- lib/Parrot/Test.pm  (revision 10619)
+++ lib/Parrot/Test.pm  (working copy)
@@ -575,18 +575,8 @@
             print SOURCE $source;
             close SOURCE;
 
-            (my $libparrot_root = $PConfig{blib_lib_libparrot_a}) =~ 
s/\$\(A\)//;
-            my $libparrot_dynamic = $libparrot_root.$PConfig{share_ext};
+           my $libparrot="$PConfig{rpath_blib} -L$PConfig{blib_dir} -lparrot";
 
-            my $libparrot;
-
-            # use shared library version if available
-            if( -e $libparrot_dynamic ) {
-                $libparrot = '-Lblib/lib -lparrot';
-            } else {
-                $libparrot = $libparrot_root.$PConfig{a};
-            }
-
             my $iculibs = "";
             if ($PConfig{'has_icu'}) {
                 $iculibs = $PConfig{icu_shared};
Index: MANIFEST
===================================================================
--- MANIFEST    (revision 10619)
+++ MANIFEST    (working copy)
@@ -252,6 +252,7 @@
 config/inter/encoding.pm                          []
 config/inter/exp.pm                               []
 config/inter/lex.pm                               []
+config/inter/libparrot.pm                         []
 config/inter/make.pm                              []
 config/inter/ops.pm                               []
 config/inter/pmc.pm                               []
Index: Configure.pl
===================================================================
--- Configure.pl        (revision 10619)
+++ Configure.pl        (working copy)
@@ -398,6 +398,7 @@
     auto::msvc
     init::optimize
     inter::shlibs
+    inter::libparrot
     inter::charset
     inter::encoding
     inter::types
Index: config/inter/libparrot.pm
===================================================================
--- config/inter/libparrot.pm   (revision 0)
+++ config/inter/libparrot.pm   (revision 0)
@@ -0,0 +1,61 @@
+# Copyright: 2005 The Perl Foundation.  All Rights Reserved.
+# $Id: libparrot.pm $
+
+=head1 NAME
+
+config/inter/libparrot.pm - Should libparrot be compiled as a shared library
+
+=head1 DESCRIPTION
+
+
+=cut
+
+package inter::libparrot;
+
+use strict;
+use vars qw($description $result @args);
+
+use base qw(Parrot::Configure::Step::Base);
+
+use Parrot::Configure::Step ':inter';
+
+$description = 'Determine if libparrot should be a shared library...';
+
[EMAIL PROTECTED] = qw(ask verbose libparrot_is_shared);
+
+sub runstep {
+    my $self = shift;
+    my ($ask, $verbose, $libparrot_is_shared) = @_;
+
+    $libparrot_is_shared =
+       integrate(Parrot::Configure::Data->get('libparrot_is_shared'),
+                 $libparrot_is_shared);
+
+    if ($ask)
+    {
+       $libparrot_is_shared=
+           prompt("\nShould libparrot be built as a shared library?",
+                  $libparrot_is_shared ? 'y' : 'n');
+
+       $libparrot_is_shared = lc($libparrot_is_shared) eq 'y';
+    }
+
+    Parrot::Configure::Data->set(libparrot_is_shared => 
+                                $libparrot_is_shared);
+
+    $result = $libparrot_is_shared ? 'yes' : 'no';
+
+    Parrot::Configure::Data->set(libparrot =>
+                        $libparrot_is_shared
+                        ? '$(LIBPARROT_SHARED)'
+                        : '$(LIBPARROT_STATIC)');
+
+    Parrot::Configure::Data->set(rpath_blib =>
+                                Parrot::Configure::Data->get('rpath') . 
+                                Parrot::Configure::Data->get('build_dir') . 
+                                Parrot::Configure::Data->get('slash') . 
+                                Parrot::Configure::Data->get('blib_dir'));
+
+}
+
+1;
Index: config/init/defaults.pm
===================================================================
--- config/init/defaults.pm     (revision 10619)
+++ config/init/defaults.pm     (working copy)
@@ -118,13 +118,20 @@
         # include debug info in executable
         ld_debug      => '',
 
-        # should we have a dependancy upon arc to generate .a's?
-        blib_lib_libparrot_a => 'blib/lib/libparrot$(A)',
+        # Library build directory
+       blib_dir      => 'blib/lib',
 
+        # libparrot library names
+        libparrot_static => 'libparrot$(A)',
+        libparrot_shared => 'libparrot$(SHARE_EXT)',
+
+        libparrot_is_shared => '0',
+
         perl          => $^X,
         test_prog     => 'parrot',
         rm_f          => '$(PERL) -MExtUtils::Command -e rm_f',
         rm_rf         => '$(PERL) -MExtUtils::Command -e rm_rf',
+        mkdir         => '$(PERL) -MExtUtils::Command -e mkpath',
         ar            => $Config{ar},
         ar_flags      => 'cr',
         ar_out        => '',                  # for Win32
Index: config/init/hints/linux.pm
===================================================================
--- config/init/hints/linux.pm  (revision 10619)
+++ config/init/hints/linux.pm  (working copy)
@@ -45,6 +45,7 @@
     i_lib_pthread  => 1,               # XXX fake a header entry
     linkflags      => $linkflags,
     link           => $link,
+    libparrot_is_shared => 1,
 );
 
 if ((split('-', $Config{archname}))[0] eq 'ia64') {
Index: config/init/hints/mswin32.pm
===================================================================
--- config/init/hints/mswin32.pm        (revision 10619)
+++ config/init/hints/mswin32.pm        (working copy)
@@ -54,10 +54,12 @@
                        ld_load_flags  => '-dll -def:libparrot.def',
                        ld_out     => '-out:',
                        ldflags    => '-nologo -nodefaultlib',
-                       blib_lib_libparrot_a => 'blib/lib/libparrot_s$(A)',
+                       libparrot_static => 'libparrot_s$(A)',
+                       libparrot_shared => 'libparrot_s$(SHARE_EXT)',
                        ar_flags   => '',
                        ar_out     => '-out:',
                        slash      => '\\',
+                        blib_dir   => 'blib\\lib',
                        ccflags    => $ccflags,
             ccwarn     => ''
                );
@@ -101,11 +103,11 @@
                        ld_load_flags   => '-dll -def:libparrot.def',
                        ld_out     => '-out:',
                        ldflags    => '-nologo -nodefaultlib',
-                       blib_lib_libparrot_a => 'blib/lib/libparrot_s$(A)',
                        ar         => 'xilib',
                        ar_flags   => '',
                        ar_out     => '-out:',
                        slash      => '\\',
+                        blib_dir   => 'blib\\lib',
                        ccflags    => $ccflags,
                        ccwarn     => ''
                );
@@ -149,9 +151,9 @@
                         ar_out => '',
                         ar_extra => '/au',
                         slash => '\\',
+                        blib_dir   => 'blib\\lib',
                         make_and => "\n\t",
 
-                        blib_lib_libparrot_a => 'blib\lib\libparrot.lib',
                );
        }
        elsif( $is_mingw ) {
@@ -173,6 +175,7 @@
                                ncilib_link_extra => 'src/libnci_test.def',
                                o => '.o',
                                slash => '\\',
+                                blib_dir   => 'blib\\lib',
                        );
                        if (Parrot::Configure::Data->get(qw(optimize)) eq "1") {
                                Parrot::Configure::Data->set(
Index: config/gen/makefiles/root.in
===================================================================
--- config/gen/makefiles/root.in        (revision 10619)
+++ config/gen/makefiles/root.in        (working copy)
@@ -89,8 +89,7 @@
 TOUCH      = $(PERL) -MExtUtils::Command -e touch
 YACC       = ${yacc}
 LEX        = ${lex}
-# do not die when dir already exits
-MKDIR      = $(PERL) -e ${PQ}-d or mkdir $$_,0777 or die foreach @ARGV${PQ}
+MKDIR      = $(PERL) -MExtUtils::Command -e mkpath
 CC         = ${cc}
 CC_INC     = ${cc_inc}
 C_LIBS     = ${libs}
@@ -457,19 +456,30 @@
 # Executables
 PARROT            = $(CUR_DIR)/${test_prog}$(EXE)
 MINIPARROT        = $(CUR_DIR)/miniparrot$(EXE)
-INSTALLABLEPARROT = $(CUR_DIR)/installable_parrot$(EXE)
-PARROT_SO         = $(CUR_DIR)/${test_prog}_so$(EXE)
 DIS               = $(CUR_DIR)/disassemble$(EXE)
 PDUMP             = $(CUR_DIR)/pdump$(EXE)
 PINFO             = $(CUR_DIR)/pbc_info$(EXE)
 PBCMERGE          = $(CUR_DIR)/pbc_merge$(EXE)
 PDB               = $(CUR_DIR)/pdb$(EXE)
 
-# libs
-LIBPARROT         = ${blib_lib_libparrot_a}
-#CONDITIONED_LINE(has_icu):ICU_SHARED      = ${icu_shared}
-ALL_PARROT_LIBS   = $(LIBPARROT) $(ICU_SHARED) $(C_LIBS)
+# Installable executables
+INSTALLABLEPARROT   = $(CUR_DIR)/installable_parrot$(EXE)
+INSTALLABLEDIS      = $(CUR_DIR)/installable_disassemble$(EXE)
+INSTALLABLEPDUMP    = $(CUR_DIR)/installable_pdump$(EXE)
+INSTALLABLEPINFO    = $(CUR_DIR)/installable_pbc_info$(EXE)
+INSTALLABLEPBCMERGE = $(CUR_DIR)/installable_pbc_merge$(EXE)
+INSTALLABLEPDB      = $(CUR_DIR)/installable_pdb$(EXE)
 
+# Libraries
+LIBPARROT_STATIC  = ${blib_dir}${slash}${libparrot_static}
+LIBPARROT_SHARED  = ${blib_dir}${slash}${libparrot_shared}
+
+# This line controls whether a static or shared library is built
+LIBPARROT         = ${libparrot}
+
+#CONDITIONED_LINE(has_icu):ICU_SHARED  = ${icu_shared}
+ALL_PARROT_LIBS   = -L${blib_dir} -lparrot $(ICU_SHARED) $(C_LIBS)
+
 # dynamic extensions
 DYNEXT_DIR        = runtime/parrot/dynext
 LIBNCI_TEST_SO    = $(DYNEXT_DIR)/libnci_test$(LOAD_EXT)
@@ -583,11 +593,9 @@
        @echo "  all:               'parrot' and the documentation."
        @echo "                     This is the default."
        @echo ""
-       @echo "  shared:            'parrot', dynamically linked"
-       @echo "  all_shared:        'parrot', dynamically linked and the 
documentation"
-       @echo ""
        @echo "  world:             'all' and 'parrot_utils'."
-       @echo "  world_shared:      'all_shared' and 'parrot_utils_shared'"
+       @echo "  installable:       same as 'world', but targets for 
installation"
+
        @echo ""
        @echo "  parrot_utils:      $(PDUMP), $(DIS), $(PINFO), $(PDB) and 
$(PBCMERGE)"
        @echo "  $(PDUMP):             Parrot Dumper"
@@ -596,7 +604,6 @@
        @echo "  $(PDB):               Parrot Debugger"
        @echo "  $(PBCMERGE):         Parrot Debugger"
        @echo ""
-       @echo "  parrot_utils_shared: same as parrot_utils, but linked against 
a shared libparrot"
        @echo ""
        @echo "Installation:"
        @echo "  install:           Install under '/usr/local/parrot' on Unix 
systems"
@@ -673,11 +680,10 @@
 
 world : all parrot_utils
 
-world_shared: all_shared parrot_utils_shared
-
 parrot_utils : $(PDUMP) $(DIS) $(PINFO) $(PDB) $(PBCMERGE)
-parrot_utils_shared : $(PDUMP)_shared $(DIS)_shared $(PINFO)_shared 
$(PDB)_shared $(PBCMERGE)_shared
 
+installable : all $(INSTALLABLEPARROT) $(INSTALLABLEPDUMP) $(INSTALLABLEDIS) 
$(INSTALLABLEPINFO) $(INSTALLABLEPDB) $(INSTALLABLEPBCMERGE)
+
 flags_dummy :
        @echo Compiling with:
        @$(PERL) tools/dev/cc_flags.pl $(CUR_DIR)/CFLAGS echo $(CC) $(CFLAGS) 
-I$(@D) ${cc_o_out} xx$(O) -c xx.c
@@ -695,15 +701,17 @@
 $(PARROT) : $(IMCC_DIR)/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
        lib/Parrot/OpLib/core.pm $(SRC_DIR)/parrot_config$(O) \
        $(MINIPARROT) ${parrot_exe_def}
-       $(LINK) ${ld_out}$(PARROT) $(LINKFLAGS) $(LINK_DYNAMIC) 
${ld_parrot_exe_def} \
-       $(IMCC_DIR)/main$(O) $(ALL_PARROT_LIBS) $(SRC_DIR)/parrot_config$(O)
+       $(LINK) ${ld_out}$(PARROT) $(LINKFLAGS) $(LINK_DYNAMIC) \
+        ${ld_parrot_exe_def} \
+       $(IMCC_DIR)/main$(O) ${rpath_blib} $(ALL_PARROT_LIBS) \
+        $(SRC_DIR)/parrot_config$(O)
 #
 # TODO build the real miniparrot
 #
 $(MINIPARROT) : $(IMCC_DIR)/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
        lib/Parrot/OpLib/core.pm $(SRC_DIR)/null_config$(O)
        $(LINK) ${ld_out}$(MINIPARROT) $(LINKFLAGS) $(IMCC_DIR)/main$(O) \
-       $(ALL_PARROT_LIBS) $(SRC_DIR)/null_config$(O)
+       ${rpath_blib} $(ALL_PARROT_LIBS) $(SRC_DIR)/null_config$(O)
 
 $(INSTALLABLEPARROT) : $(IMCC_DIR)/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
        lib/Parrot/OpLib/core.pm $(SRC_DIR)/install_config$(O) \
@@ -747,40 +755,25 @@
 check_source : $(GENERAL_H_FILES)
        $(PERL) tools/dev/check_source_standards.pl all_source
 
-###############################################################################
-#
-# Shared Library Targets:
-#
-###############################################################################
-
-shared : $(GEN_HEADERS) blib/lib/libparrot$(SHARE_EXT).$(SOVERSION) 
$(LIBPARROT) $(INSTALLABLEPARROT)
-       $(LINK) ${ld_out}$(INSTALLABLEPARROT) $(LINKFLAGS) $(IMCC_DIR)/main$(O) 
-Lblib/lib -lparrot $(ICU_SHARED) $(C_LIBS)
-
-all_shared : all shared
-
-static : $(GEN_HEADERS) $(LIBPARROT)
-
 # XXX changes don't always propagate into libparrot
 # e.g. when I change debug:fataly to xfataly, nm still shows the old symbol
 # and parrot builds fine (except for the unproto warning
 # so always delete the lib -leo
 
-$(LIBPARROT) : $(O_FILES)
+$(LIBPARROT_STATIC) : $(O_FILES)
        $(RM_F) $@
-       $(MKDIR) blib blib/lib
+       $(MKDIR) ${blib_dir}
+       $(RM_F) $(LIBPARROT_STATIC) $(LIBPARROT_SHARED)
        $(AR_CR) ${ar_out}$@ ${ar_extra} $(O_FILES)
        $(RANLIB) $@
 
-blib/lib/libparrot$(SHARE_EXT).$(SOVERSION) : $(O_FILES) 
$(SRC_DIR)/install_config$(O)
-       $(MKDIR) blib blib/lib
-       $(LD) -Wl,-soname=libparrot$(SHARE_EXT).$(SOVERSION) $(LD_SHARE_FLAGS) 
$(LDFLAGS) ${ld_out}blib/lib/libparrot$(SHARE_EXT).$(SOVERSION) $(O_FILES) 
$(SRC_DIR)/install_config$(O) $(C_LIBS) $(ICU_SHARED)) 
-       cp blib/lib/libparrot$(SHARE_EXT).$(SOVERSION) 
blib/lib/libparrot$(SHARE_EXT)
 
-$(PARROT_SO) : $(IMCC_DIR)/main$(O) blib/lib/libparrot$(SHARE_EXT) 
lib/Parrot/OpLib/core.pm
-       $(LINK) $(LINKFLAGS) ${ld_out}$(PARROT) $(IMCC_DIR)/main$(O) \
-       $(SRC_DIR)/parrot_config$(O) -Lblib/lib -lparrot \
-       $(C_LIBS) $(ICU_SHARED)
+$(LIBPARROT_SHARED) : $(O_FILES)
+       $(MKDIR) ${blib_dir}
+       $(RM_F) $(LIBPARROT_STATIC) $(LIBPARROT_SHARED)
+       $(LD) $(LD_SHARE_FLAGS) $(LDFLAGS) ${ld_out}$@ $(O_FILES) $(C_LIBS) 
$(ICU_SHARED)
 
+
 #
 # Parrot Debugger
 #
@@ -791,12 +784,13 @@
        $(LINK) ${ld_out}$(PDB) \
        $(SRC_DIR)/pdb$(O) \
        $(SRC_DIR)/null_config$(O) \
-       $(LINKFLAGS) $(ALL_PARROT_LIBS)
+       $(LINKFLAGS) ${rpath_blib} $(ALL_PARROT_LIBS)
 
-$(PDB)_shared : $(SRC_DIR)/pdb$(O) blib/lib/libparrot$(SHARE_EXT).$(SOVERSION)
-       $(LINK) ${ld_out}$(PDB)_shared \
+$(INSTALLABLEPDB) : $(SRC_DIR)/pdb$(O) $(LIBPARROT)
+       $(LINK) ${ld_out}$(INSTALLABLEPDB) \
        $(SRC_DIR)/pdb$(O) \
-       $(LINKFLAGS) -Lblib/lib -lparrot $(ALL_PARROT_LIBS)
+       $(SRC_DIR)/install_config$(O) \
+       $(LINKFLAGS) $(ALL_PARROT_LIBS)
 
 #
 # Parrot Disassembler
@@ -808,12 +802,13 @@
        $(LINK) ${ld_out}$(DIS) \
        $(SRC_DIR)/disassemble$(O) \
        $(SRC_DIR)/null_config$(O) \
-       $(LINKFLAGS) $(ALL_PARROT_LIBS)
+       $(LINKFLAGS) ${rpath_blib} $(ALL_PARROT_LIBS)
 
-$(DIS)_shared : $(SRC_DIR)/disassemble$(O) 
blib/lib/libparrot$(SHARE_EXT).$(SOVERSION)
-       $(LINK) ${ld_out}$(DIS)_shared \
+$(INSTALLABLEDIS) : $(SRC_DIR)/disassemble$(O) $(LIBPARROT)
+       $(LINK) ${ld_out}$(INSTALLABLEDIS) \
        $(SRC_DIR)/disassemble$(O) \
-       $(LINKFLAGS) -Lblib/lib -lparrot $(ALL_PARROT_LIBS)
+       $(SRC_DIR)/install_config$(O) \
+       $(LINKFLAGS) $(ALL_PARROT_LIBS)
 
 #
 # Parrot Dump
@@ -823,13 +818,13 @@
        $(LINK) ${ld_out}$(PDUMP) \
        $(SRC_DIR)/pdump$(O) \
        $(SRC_DIR)/null_config$(O) \
-       $(SRC_DIR)/packdump$(O) $(LINKFLAGS) $(ALL_PARROT_LIBS)
+       $(SRC_DIR)/packdump$(O) $(LINKFLAGS) ${rpath_blib} $(ALL_PARROT_LIBS)
 
-$(PDUMP)_shared : $(SRC_DIR)/pdump$(O) $(SRC_DIR)/packdump$(O) 
blib/lib/libparrot$(SHARE_EXT).$(SOVERSION)
-       $(LINK) ${ld_out}$(PDUMP)_shared \
+$(INSTALLABLEPDUMP) : $(SRC_DIR)/pdump$(O) $(SRC_DIR)/packdump$(O) $(LIBPARROT)
+       $(LINK) ${ld_out}$(INSTALLABLEPDUMP) \
        $(SRC_DIR)/pdump$(O) \
-       $(SRC_DIR)/packdump$(O) \
-       $(LINKFLAGS) -Lblib/lib -lparrot $(ALL_PARROT_LIBS)
+       $(SRC_DIR)/install_config$(O) \
+       $(SRC_DIR)/packdump$(O) $(LINKFLAGS) $(ALL_PARROT_LIBS)
 
 
 # pbc_info
@@ -837,12 +832,13 @@
        $(LINK) ${ld_out}$(PINFO) \
        $(SRC_DIR)/pbc_info$(O) \
        $(SRC_DIR)/null_config$(O) \
-       $(LINKFLAGS) $(ALL_PARROT_LIBS)
+       $(LINKFLAGS) ${rpath_blib} $(ALL_PARROT_LIBS)
 
-$(PINFO)_shared : $(SRC_DIR)/pbc_info$(O) 
blib/lib/libparrot$(SHARE_EXT).$(SOVERSION)
-       $(LINK) ${ld_out}$(PINFO)_shared \
+$(INSTALLABLEPINFO) : $(SRC_DIR)/pbc_info$(O) $(LIBPARROT)
+       $(LINK) ${ld_out}$(INSTALLABLEPINFO) \
        $(SRC_DIR)/pbc_info$(O) \
-       $(LINKFLAGS) -Lblib/lib -lparrot $(ALL_PARROT_LIBS)
+       $(SRC_DIR)/install_config$(O) \
+       $(LINKFLAGS) $(ALL_PARROT_LIBS)
 
 #
 # Parrot Bytecode File Merger
@@ -852,14 +848,17 @@
        $(LINK) ${ld_out}$(PBCMERGE) \
        $(SRC_DIR)/pbc_merge$(O) \
        $(SRC_DIR)/parrot_config$(O) \
-       $(LINKFLAGS) $(LINK_DYNAMIC) $(ALL_PARROT_LIBS)
+       $(LINKFLAGS) $(LINK_DYNAMIC) ${rpath_blib} $(ALL_PARROT_LIBS)
 
-$(PBCMERGE)_shared : $(SRC_DIR)/pbc_merge$(O) 
blib/lib/libparrot$(SHARE_EXT).$(SOVERSION)
-       $(LINK) ${ld_out}$(PBCMERGE)_shared \
+
+$(INSTALLABLEPBCMERGE) : $(SRC_DIR)/pbc_merge$(O) $(LIBPARROT)
+       $(LINK) ${ld_out}$(INSTALLABLEPBCMERGE) \
        $(SRC_DIR)/pbc_merge$(O) \
-       $(LINKFLAGS) -Lblib/lib -lparrot $(ALL_PARROT_LIBS)
+       $(SRC_DIR)/install_config$(O) \
+       $(LINKFLAGS) $(ALL_PARROT_LIBS)
 
 
+
 ###############################################################################
 #
 # Other Dependencies and Build Rules:
@@ -1417,18 +1416,24 @@
                $(PARROT) \
                $(MINIPARROT) \
                $(INSTALLABLEPARROT) \
+               $(INSTALLABLEDIS) \
+               $(INSTALLABLEPDUMP) \
+               $(INSTALLABLEPINFO) \
+               $(INSTALLABLEPBCMERGE) \
+               $(INSTALLABLEPDB) \
                $(IMCC_DIR)/main$(O) \
-               $(PDUMP) $(PDUMP)_shared $(SRC_DIR)/pdump$(O) 
$(SRC_DIR)/packdump$(O) \
-               $(SRC_DIR)/pbc_info$(O) $(PINFO)_shared $(PINFO) \
-               $(PDB) $(PDB)_shared $(SRC_DIR)/pdb$(O) \
-               $(PBCMERGE) $(PBCMERGE)_shared $(SRC_DIR)/pbc_merge$(O) \
-               $(DIS) $(DIS)_shared $(SRC_DIR)/disassemble$(O) \
+               $(PDUMP) $(SRC_DIR)/pdump$(O) $(SRC_DIR)/packdump$(O) \
+               $(SRC_DIR)/pbc_info$(O) $(PINFO) \
+               $(PDB) $(SRC_DIR)/pdb$(O) \
+               $(PBCMERGE) $(SRC_DIR)/pbc_merge$(O) \
+               $(DIS) $(SRC_DIR)/disassemble$(O) \
                $(SRC_DIR)/null_config$(O) \
                $(SRC_DIR)/parrot_config$(O) \
                $(SRC_DIR)/install_config$(O) \
                install_config.fpmc \
                $(LIBNCI_TEST_SO) \
-               $(LIBPARROT)
+               $(LIBPARROT_STATIC) \
+               $(LIBPARROT_SHARED)
        $(PERL) tools/build/c2str.pl --init
        $(RM_F) \
                $(INC_DIR)/string_private_cstring.h \
@@ -1559,7 +1564,7 @@
 #
 ###############################################################################
 
-install : $(INSTALLABLEPARROT)
+install : installable
        $(PERL) tools/dev/install_files.pl \
        --buildprefix=$(BUILDPREFIX) \
        --prefix=$(PREFIX) \
@@ -1616,11 +1621,8 @@
 ###############################################################################
 
 exec : $(SRC_DIR)/exec_start$(O) $(SRC_DIR)/parrot_config$(O) $(LIBPARROT)
-       $(LINK) ${ld_out}$(EXEC)$(EXE) $(LINKFLAGS) $(EXEC)$(O) 
$(SRC_DIR)/exec_start$(O) $(SRC_DIR)/parrot_config$(O) $(ALL_PARROT_LIBS)
+       $(LINK) ${ld_out}$(EXEC)$(EXE) $(LINKFLAGS) $(EXEC)$(O) 
$(SRC_DIR)/exec_start$(O) $(SRC_DIR)/parrot_config$(O) ${rpath_blib} 
$(ALL_PARROT_LIBS)
 
-exec_so : $(SRC_DIR)/exec_start$(O) blib/lib/libparrot$(SHARE_EXT)
-       $(LINK) ${ld_out}$(EXEC)$(SHARE_EXT) $(LINKFLAGS) $(EXEC)$(O) 
$(SRC_DIR)/exec_start$(O) $(SRC_DIR)/parrot_config$(O) -lparrot $(C_LIBS)
-
 ###### OS depend targets ##########
 
 # for use by t/pmc/nci.t

Reply via email to