# New Ticket Created by  Reini Urban 
# Please include the string:  [perl #57296]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=57296 >


---
osname= cygwin
osvers= 1.5.25(0.15642)
arch=   cygwin-thread-multi-64int
cc=     gcc
---
Flags:
     category=install
     severity=medium
     ack=no
---

make install -C languages DESTDIR=inst
Help generating parrot packages with parrot-languages and self-hosting 
languages.

pbc_to_exe $LANG --install creates now [EMAIL PROTECTED]@ 
self-hosting binaries with dependencies to /usr/lib/parrot, not to build_dir

make installable is needed to create those pbc's.
make test-installable is needed to test those pbc's against installed 
libraries.
make install is needed to copy the installables, pmcs and docs to the 
destination

A future plan is to simplify the languages/$LANG/config/root.in 
framework by auto-generating the automatic targets from some basic make 
definitions and parts.
Really needed is just the definitions for PBCS, PMCS, DOCS, the test and 
test-installable target and some intermediate targets.

Halfway patch attached.

---
Summary of my parrot 0.6.4 (r0) configuration:
      configdate='Sat Jul 19 10:18:22 2008 GMT'
      Platform:
        osname=cygwin, archname=cygwin-thread-multi-64int
        jitcapable=1, jitarchname=i386-cygwin,
        jitosname=CYGWIN, jitcpuarch=i386
        execcapable=1
        perl=/usr/bin/perl.exe
      Compiler:
        cc='gcc', ccflags='-U__STRICT_ANSI__  -pipe -I/usr/local/include
-DHASATTRIBUTE_CONST  -DHASATTRIBUTE_DEPRECATED  -DHASATTRIBUTE_MALLOC
-DHASATTRIBUTE_NONNULL  -DHASATTRIBUTE_NORETURN  -DHASATTRIBUTE_PURE
-DHASATTRIBUTE_UNUSED  -DHASATTRIBUTE_WARN_UNUSED_RESULT
-falign-functions=16 -maccumulate-outgoing-args -W -Wall
-Waggregate-return -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment
-Wdisabled-optimization -Wendif-labels -Wextra -Wformat
-Wformat-extra-args -Wformat-nonliteral -Wformat-security -Wformat-y2k
-Wimplicit -Wimport -Winit-self -Winline -Winvalid-pch -Wmissing-braces
-Wno-missing-format-attribute -Wpacked -Wparentheses -Wpointer-arith
-Wreturn-type -Wsequence-point -Wno-shadow -Wsign-compare
-Wstrict-aliasing -Wstrict-aliasing=2 -Wswitch -Wswitch-default
-Wtrigraphs -Wundef -Wunknown-pragmas -Wno-unused -Wwrite-strings
-Wbad-function-cast -Wdeclaration-after-statement
-Wimplicit-function-declaration -Wimplicit-int -Wmain
-Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wnonnull
-DDISABLE_GC_DEBUG=1 -DNDEBUG -O3 -DHAS_GETTEXT',
      Linker and Libraries:
        ld='gcc', ldflags=' -Wl,--enable-auto-import
-Wl,--export-all-symbols -Wl,--stack,8388608
-Wl,--enable-auto-image-base -L/usr/local/lib',
        cc_ldflags='',
        libs='-lcrypt -lgmp -lreadline -lpcre /usr/bin/glut32.dll -lglu32
-lopengl32 -lcrypto -lintl'
      Dynamic Linking:
        share_ext='.dll', ld_share_flags='-shared',
        load_ext='.dll', ld_load_flags='-shared'
      Types:
        iv=long, intvalsize=4, intsize=4, opcode_t=long, opcode_t_size=4,
        ptrsize=4, ptr_alignment=1 byteorder=1234,
        nv=double, numvalsize=8, doublesize=8
      Locally applied patches:
         [perl #51944] [DOCS]  Cygwin Readme
         [perl #56562] [PATCH] root.in: add cygwin importlib
         [perl #56544] [PATCH] install_files.pl
         [perl #56558] [PATCH] pdb rename to parrot_pdb
         [perl #56998] [TODO]  rename cygwin dll to cygparrot.dll
         [perl #57006] [PATCH] add cygwin opengl config quirks
         [perl #57110] [PATCH] ncurses for cygwin
         [perl #57112] [PATCH] postgres for cygwin
         [perl #57114] [PATCH] urm RealBin issue
---
Environment:
         CYGWIN =server
         HOME =/home/rurban
         LANG  (unset)
         LANGUAGE  (unset)
         LD_LIBRARY_PATH  (unset)
         LOGDIR  (unset)
         PATH
=~/bin:/usr/bin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS:/usr/bin:/cygdrive/c/WINDOWS/System32/Wbem:/cygdrive/c/Programme/ATI

Technologies/ATI.ACE/Core-Static:/usr/local/bin:/usr/lib/gstreamer-0.8:/usr/lib/lapack
         SHELL  (unset)

diff -urN config/gen/languages.pm config/gen/languages.pm
--- config/gen/languages.pm	2008-07-02 13:38:41.000000000 +0000
+++ config/gen/languages.pm	2008-07-26 08:48:41.437500000 +0000
@@ -75,7 +75,7 @@
         }
         elsif ( $language eq 'c99' ) {
             $conf->genfile("$langdir/config/makefiles/root.in"     => "$langdir/Makefile");
-            $conf->genfile("$langdir/config/makefiles/cpp.in"      => "$langdir/src/cpp//Makefile");
+            $conf->genfile("$langdir/config/makefiles/cpp.in"      => "$langdir/src/cpp/Makefile");
         }
         elsif ( $language eq 'tcl' ) {
             # tcl has more than one Makefile
diff -urN config/gen/makefiles/languages.in config/gen/makefiles/languages.in
--- config/gen/makefiles/languages.in	2008-07-02 13:38:41.000000000 +0000
+++ config/gen/makefiles/languages.in	2008-07-26 10:51:25.828125000 +0000
@@ -1,4 +1,4 @@
-# $Id: languages.in 28952 2008-07-02 13:38:36Z bernhard $
+# $Id: languages.in 28952 2008-07-02 13:38:36Z bernhard $ -*- Makefile -*-
 
 # setup of commands
 @make_set_make@
@@ -47,6 +47,12 @@
 	@echo ""
 	@echo "  test-separate: Run 'make test' in the individual lang dirs."
 	@echo ""
+	@echo "  installable:   Create self-hosting bins and libs."
+	@echo ""
+	@echo "  test-installable: Test self-hosting bins and libs."
+	@echo ""
+	@echo "  install:       Copy installable and more to DESTDIR."
+	@echo ""
 	@echo "  clean:         Clean up a lot of languages."
 	@echo ""
 	@echo "  help:          Print this help message."
@@ -60,13 +66,16 @@
 	@echo "Following languages are available:"
 	@echo "  $(LANGUAGES)"
 	@echo ""
-	@echo "A particular language <lang> can be built, tested and cleand up"
+	@echo "A particular language <lang> can be built, tested and cleaned up"
 	@echo "  make <lang>"
 	@echo "  make <lang>.test"
+	@echo "  make <lang>.installable"
+	@echo "  make <lang>.test-installable"
+	@echo "  make <lang>.install"
 	@echo "  make <lang>.clean"
 	@echo "  make <lang>.realclean"
 	@echo ""
-	@echo "For the status of individual languages see LANGUAGES.STATUS.pod"
+	@echo "For the status of individual languages see LANGUAGES_STATUS.pod"
 	@echo ""
 
 # regenerate the Makefile
@@ -98,6 +107,65 @@
     WMLScript.test \
     Zcode.test
 
+installable : all \
+    abc.installable APL.installable \
+    befunge.installable bf.installable \
+    c99.installable cardinal.installable chitchat.installable cola.installable \
+    dotnet.installable \
+    eclectus.installable ecmascript.installable \
+    forth.installable \
+    hq9plus.installable \
+    jako.installable json.installable \
+    lazy-k.installable lisp.installable lolcode.installable lua.installable \
+    m4.installable \
+    ook.installable \
+    parrot_compiler.installable perl6.installable pheme.installable PIR.installable pipp.installable pugs.installable punie.installable pynie.installable \
+    regex.installable \
+    scheme.installable squaak.installable \
+    tcl.installable \
+    urm.installable unlambda.installable \
+    WMLScript.installable \
+    Zcode.installable
+
+test-installable : all \
+    abc.test-installable APL.test-installable \
+    befunge.test-installable bf.test-installable \
+    c99.test-installable cardinal.test-installable chitchat.test-installable cola.test-installable \
+    dotnet.test-installable \
+    eclectus.test-installable ecmascript.test-installable \
+    forth.test-installable \
+    hq9plus.test-installable \
+    jako.test-installable json.test-installable \
+    lazy-k.test-installable lisp.test-installable lolcode.test-installable lua.test-installable \
+    m4.test-installable \
+    ook.test-installable \
+    parrot_compiler.test-installable perl6.test-installable pheme.test-installable PIR.test-installable pipp.test-installable pugs.test-installable punie.test-installable pynie.test-installable \
+    regex.test-installable \
+    scheme.test-installable squaak.test-installable \
+    tcl.test-installable \
+    urm.test-installable unlambda.test-installable \
+    WMLScript.test-installable \
+    Zcode.test-installable
+
+install : all \
+    abc.install APL.install \
+    befunge.install bf.install \
+    c99.install cardinal.install chitchat.install cola.install \
+    dotnet.install \
+    eclectus.install ecmascript.install \
+    forth.install \
+    hq9plus.install \
+    jako.install json.install \
+    lazy-k.install lisp.install lolcode.install lua.install \
+    m4.install \
+    ook.install \
+    parrot_compiler.install perl6.install pheme.install PIR.install pipp.install pugs.install punie.install pynie.install \
+    regex.install \
+    scheme.install squaak.install \
+    tcl.install \
+    urm.install unlambda.install \
+    WMLScript.install \
+    Zcode.install
 
 smoke:  all
 	$(PERL) t/harness --html
@@ -160,6 +228,12 @@
 	- $(MAKE) abc
 abc.test:
 	- $(MAKE) abc test
+abc.installable:
+	- $(MAKE) abc installable
+abc.test-installable:
+	- $(MAKE) abc test-installable
+abc.install:
+	- $(MAKE) abc install
 abc.clean:
 	- $(MAKE) abc clean
 abc.realclean:
@@ -170,6 +244,12 @@
 	- $(MAKE) APL
 APL.test:
 	- $(MAKE) APL test
+APL.installable:
+	- $(MAKE) APL installable
+APL.test-installable:
+	- $(MAKE) APL test-installable
+APL.install:
+	- $(MAKE) APL install
 APL.clean:
 	- $(MAKE) APL clean
 APL.realclean:
@@ -180,6 +260,12 @@
 # don't know how to build BASIC
 BASIC.test:
 # Don't know how to test BASIC
+BASIC.installable:
+# Missing for BASIC
+BASIC.test-installable:
+# Missing for BASIC
+BASIC.install:
+# Missing for BASIC
 BASIC.clean:
 # Don't know how to clean BASIC
 
@@ -188,6 +274,12 @@
 	- $(MAKE) befunge
 befunge.test:
 	- $(MAKE) befunge test
+befunge.installable:
+	- $(MAKE) befunge installable
+befunge.test-installable:
+	- $(MAKE) befunge test-installable
+befunge.install:
+	- $(MAKE) befunge install
 befunge.clean:
 	- $(MAKE) befunge clean
 befunge.realclean:
@@ -198,6 +290,12 @@
 	- $(MAKE) bf
 bf.test:
 	- $(MAKE) bf test
+bf.installable:
+	- $(MAKE) bf installable
+bf.test-installable:
+	- $(MAKE) bf test-installable
+bf.install:
+	- $(MAKE) bf install
 bf.clean:
 	- $(MAKE) bf clean
 bf.realclean:
@@ -208,6 +306,12 @@
 	- $(MAKE) c99
 c99.test:
 	- $(MAKE) c99 test
+c99.installable:
+	- $(MAKE) c99 installable
+c99.test-installable:
+	- $(MAKE) c99 test-installable
+c99.install:
+	- $(MAKE) c99 install
 c99.clean:
 	- $(MAKE) c99 clean
 c99.realclean:
@@ -228,6 +332,12 @@
 	- $(MAKE) chitchat
 chitchat.test:
 	- $(MAKE) chitchat test
+chitchat.installable:
+	- $(MAKE) chitchat installable
+chitchat.test-installable:
+	- $(MAKE) chitchat test-installable
+chitchat.install:
+	- $(MAKE) chitchat install
 chitchat.clean:
 	- $(MAKE) chitchat clean
 chitchat.realclean:
@@ -238,6 +348,12 @@
 	- $(MAKE) cola
 cola.test:
 	- $(MAKE) cola test
+cola.installable:
+	- $(MAKE) cola installable
+cola.test-installable:
+	- $(MAKE) cola test-installable
+cola.install:
+	- $(MAKE) cola install
 cola.clean:
 	- $(MAKE) cola clean
 cola.realclean:
@@ -259,6 +375,12 @@
 	- $(MAKE) eclectus
 eclectus.test :
 	- $(MAKE) eclectus test
+eclectus.installable:
+	- $(MAKE) eclectus installable
+eclectus.test-installable:
+	- $(MAKE) eclectus test-installable
+eclectus.install:
+	- $(MAKE) eclectus install
 eclectus.clean :
 	- $(MAKE) eclectus clean
 eclectus.realclean :
@@ -269,6 +391,12 @@
 	- $(MAKE) ecmascript
 ecmascript.test:
 	- $(MAKE) ecmascript test
+ecmascript.installable:
+	- $(MAKE) ecmascript installable
+ecmascript.test-installable:
+	- $(MAKE) ecmascript test-installable
+ecmascript.install:
+	- $(MAKE) ecmascript install
 ecmascript.clean:
 	- $(MAKE) ecmascript clean
 ecmascript.realclean:
@@ -289,6 +417,12 @@
 	- $(MAKE) hq9plus
 hq9plus.test:
 	- $(MAKE) hq9plus test
+hq9plus.installable:
+	- $(MAKE) hq9plus installable
+hq9plus.test-installable:
+	- $(MAKE) hq9plus test-installable
+hq9plus.install:
+	- $(MAKE) hq9plus install
 hq9plus.clean:
 	- $(MAKE) hq9plus clean
 hq9plus.realclean:
@@ -299,6 +433,12 @@
 	- $(MAKE) jako
 jako.test:
 	- $(MAKE) jako test
+abc.installable:
+	- $(MAKE) jako installable
+jako.test-installable:
+	- $(MAKE) jako test-installable
+jako.install:
+	- $(MAKE) jako install
 jako.clean:
 	- $(MAKE) jako clean
 jako.realclean:
@@ -309,6 +449,12 @@
 	- $(MAKE) json
 json.test:
 	- $(MAKE) json test
+json.installable:
+	- $(MAKE) json installable
+json.test-installable:
+	- $(MAKE) json test-installable
+json.install:
+	- $(MAKE) json install
 json.clean:
 	- $(MAKE) json clean
 json.realclean:
@@ -319,6 +465,12 @@
 	- $(MAKE) lazy-k
 lazy-k.test:
 	- $(MAKE) lazy-k test
+lazy-k.installable:
+	- $(MAKE) lazy-k installable
+lazy-k.test-installable:
+	- $(MAKE) lazy-k test-installable
+lazy-k.install:
+	- $(MAKE) lazy-k install
 lazy-k.clean:
 	- $(MAKE) lazy-k clean
 lazy-k.realclean:
@@ -329,6 +481,12 @@
 	- $(MAKE) lisp
 lisp.test:
 	- $(MAKE) lisp test
+lisp.installable:
+	- $(MAKE) lisp installable
+lisp.test-installable:
+	- $(MAKE) lisp test-installable
+lisp.install:
+	- $(MAKE) lisp install
 lisp.clean:
 	- $(MAKE) lisp clean
 lisp.realclean:
@@ -339,6 +497,12 @@
 	- $(MAKE) lolcode
 lolcode.test:
 	- $(MAKE) lolcode test
+lolcode.installable:
+	- $(MAKE) lolcode installable
+lolcode.test-installable:
+	- $(MAKE) lolcode test-installable
+lolcode.install:
+	- $(MAKE) lolcode install
 lolcode.clean:
 	- $(MAKE) lolcode clean
 lolcode.realclean:
@@ -349,6 +513,12 @@
 	- $(MAKE) lua
 lua.test:
 	- $(MAKE) lua test
+lua.installable:
+	- $(MAKE) lua installable
+lua.test-installable:
+	- $(MAKE) lua test-installable
+lua.install:
+	- $(MAKE) lua install
 lua.clean:
 	- $(MAKE) lua clean
 lua.realclean:
@@ -369,6 +539,12 @@
 	- $(MAKE) ook
 ook.test:
 	- $(MAKE) ook test
+ook.installable:
+	- $(MAKE) ook installable
+ook.test-installable:
+	- $(MAKE) ook test-installable
+ook.install:
+	- $(MAKE) ook install
 ook.clean:
 	- $(MAKE) ook clean
 ook.realclean:
@@ -389,6 +565,12 @@
 	- $(MAKE) perl6
 perl6.test:
 	- $(MAKE) perl6 test
+perl6.installable:
+	- $(MAKE) perl6 installable
+perl6.test-installable:
+	- $(MAKE) perl6 test-installable
+perl6.install:
+	- $(MAKE) perl6 install
 perl6.clean:
 	- $(MAKE) perl6 clean
 perl6.realclean:
@@ -409,6 +591,12 @@
 	- $(MAKE) pipp
 pipp.test:
 	- $(MAKE) pipp test
+pipp.installable:
+	- $(MAKE) pipp installable
+pipp.test-installable:
+	- $(MAKE) pipp test-installable
+pipp.install:
+	- $(MAKE) pipp install
 pipp.clean:
 	- $(MAKE) pipp clean
 pipp.realclean:
@@ -429,6 +617,12 @@
 	- $(MAKE) pugs
 pugs.test:
 	- $(MAKE) pugs test
+pugs.installable:
+	- $(MAKE) pugs installable
+pugs.test-installable:
+	- $(MAKE) pugs test-installable
+pugs.install:
+	- $(MAKE) pugs install
 pugs.clean:
 	- $(MAKE) pugs clean
 pugs.realclean:
@@ -449,6 +643,12 @@
 	- $(MAKE) pynie
 pynie.test:
 	- $(MAKE) pynie test
+pynie.installable:
+	- $(MAKE) pynie installable
+pynie.test-installable:
+	- $(MAKE) pynie test-installable
+pynie.install:
+	- $(MAKE) pynie install
 pynie.clean:
 	- $(MAKE) pynie clean
 pynie.realclean:
@@ -469,6 +669,12 @@
 	@echo "SKIPPED: scheme: (nothing to make, but should not default to make test)"
 scheme.test :
 	- $(MAKE) scheme test
+scheme.installable:
+	- $(MAKE) scheme installable
+scheme.test-installable:
+	- $(MAKE) scheme test-installable
+scheme.install:
+	- $(MAKE) scheme install
 scheme.clean :
 	- $(MAKE) scheme clean
 scheme.realclean :
@@ -489,6 +695,12 @@
 	- $(MAKE) tcl
 tcl.test:
 	- $(MAKE) tcl test
+tcl.installable:
+	- $(MAKE) tcl installable
+tcl.test-installable:
+	- $(MAKE) tcl test-installable
+tcl.install:
+	- $(MAKE) tcl install
 tcl.clean:
 	- $(MAKE) tcl clean
 tcl.realclean:
@@ -509,6 +721,12 @@
 	- $(MAKE) urm
 urm.test:
 	- $(MAKE) urm test
+urm.installable:
+	- $(MAKE) urm installable
+urm.test-installable:
+	- $(MAKE) urm test-installable
+urm.install:
+	- $(MAKE) urm install
 urm.clean:
 	- $(MAKE) urm clean
 urm.realclean:
@@ -519,6 +737,12 @@
 	- $(MAKE) WMLScript
 WMLScript.test:
 	- $(MAKE) WMLScript test
+WMLScript.installable:
+	- $(MAKE) WMLScript installable
+WMLScript.test-installable:
+	- $(MAKE) WMLScript test-installable
+WMLScript.install:
+	- $(MAKE) WMLScript install
 WMLScript.clean:
 	- $(MAKE) WMLScript clean
 WMLScript.realclean:
@@ -529,6 +753,12 @@
 # Do nothing. make Zcode requires an Inform compiler
 Zcode.test:
 	- $(MAKE) Zcode test
+Zcode.installable:
+	- $(MAKE) Zcode installable
+Zcode.test-installable:
+	- $(MAKE) Zcode test-installable
+Zcode.install:
+	- $(MAKE) Zcode install
 Zcode.clean:
 	- $(MAKE) Zcode clean
 Zcode.realclean:
diff -urN languages/APL/config/makefiles/root.in languages/APL/config/makefiles/root.in
--- languages/APL/config/makefiles/root.in	2008-06-24 17:19:59.000000000 +0000
+++ languages/APL/config/makefiles/root.in	2008-07-26 09:32:19.546875000 +0000
@@ -1,12 +1,17 @@
-## $Id: root.in 28657 2008-06-23 00:33:41Z coke $
+## $Id: root.in 28657 2008-06-23 00:33:41Z coke $ -*- Makefile -*-
 
 ## arguments we want to run parrot with
 PARROT_ARGS =
 
 ## configuration settings
+LANG	      = APL
 BUILD_DIR     = @build_dir@
 LOAD_EXT      = @load_ext@
 O             = @o@
+BIN_DIR       = @bin_dir@
+LIB_DIR       = @lib_dir@
+DOC_DIR       = @doc_dir@
+MANDIR	      = @mandir@
 
 ## Setup some commands
 LN_S          = @lns@
@@ -15,8 +20,10 @@
 CP            = @cp@
 PARROT        = ../../[EMAIL PROTECTED]@
 CAT           = $(PERL) -MExtUtils::Command -e cat
+PBC_TO_EXE    = ../../[EMAIL PROTECTED]@
 BUILD_DYNPMC  = $(PERL) $(BUILD_DIR)/tools/build/dynpmc.pl
 RECONFIGURE   = $(PERL) $(BUILD_DIR)/tools/dev/reconfigure.pl
+POD2MAN	      = pod2man
 #CONDITIONED_LINE(darwin):
 #CONDITIONED_LINE(darwin):# MACOSX_DEPLOYMENT_TARGET must be defined for OS X compilation/linking
 #CONDITIONED_LINE(darwin):export MACOSX_DEPLOYMENT_TARGET := @osx_version@
@@ -42,11 +49,18 @@
 
 PMCS = aplvector
 PMC_SOURCES = $(PMC_DIR)/aplvector.pmc
+DOCS = MAINTAINER README STATUS
 
 # the default target
 APL.pbc: $(PARROT) $(SOURCES) $(APL_GROUP)
 	$(PARROT) $(PARROT_ARGS) -o APL.pbc APL.pir
 
+$(LANG)@exe@: $(LANG).pbc
+	$(PBC_TO_EXE) $(LANG).pbc
+
+installable_$(LANG)@exe@: $(LANG).pbc
+	$(PBC_TO_EXE) $(LANG).pbc --install
+
 src/gen_grammar.pir: $(PERL6GRAMMAR) src/parser/grammar.pg
 	$(PARROT) $(PARROT_ARGS) $(PERL6GRAMMAR) \
 	    --encoding=utf8 \
@@ -66,9 +80,13 @@
 	cd $(PMC_DIR) && $(BUILD_DYNPMC) linklibs $(PMCS)
 	cd $(PMC_DIR) && $(BUILD_DYNPMC) copy --destination=$(PARROT_DYNEXT) $(PMCS)
 
+installable : installable_$(LANG)@exe@ $(ABC_GROUP)
+	cp installable_$(LANG)@exe@ $(BUILD_DIR)/
+	cd $(PMC_DIR) && $(BUILD_DYNPMC) copy --destination=$(PARROT_DYNEXT) $(PMCS)
+
 # regenerate the Makefile
 Makefile: config/makefiles/root.in
-	cd $(BUILD_DIR) && $(RECONFIGURE) --step=gen::languages --languages=APL
+	cd $(BUILD_DIR) && $(RECONFIGURE) --step=gen::languages --languages=$(LANG)
 
 # This is a listing of all targets, that are meant to be called by users
 help:
@@ -77,8 +95,11 @@
 	@echo ""
 	@echo "  all:               APL.pbc"
 	@echo "                     This is the default."
+	@echo "  install:           install the installable targets and docs."
+	@echo ""
 	@echo "Testing:"
 	@echo "  test:              Run the test suite."
+	@echo "  test-installable:  Test self-hosting targets."
 	@echo "  testclean:         Clean up test results."
 	@echo ""
 	@echo "Cleaning:"
@@ -93,6 +114,16 @@
 test: all
 	$(PERL) t/harness
 
+# TODO: test for installed libs, rename build_dir. basic run for missing libs
+test-installable : installable
+	./installable_$(LANG)@exe@ demo.apl
+
+install : installable
+	cp installable_$(LANG)@exe@ $(DESTDIR)$(BIN_DIR)/parrot-$(LANG)@exe@
+	pod2man $(LANG).pir > $(DESTDIR)$(MANDIR)/man1/parrot-$(LANG).1
+	mkdir $(DESTDIR)$(DOC_DIR)/languages/$(LANG)
+	cp $(DOCS) $(DESTDIR)$(DOC_DIR)/languages/$(LANG)
+
 testclean:
 	$(RM_F) t/*.pir
 
@@ -111,6 +142,8 @@
   $(PMC_DIR)/*.manifest \
   $(PMC_DIR)/*.pdb \
   $(PMC_DIR)/*.lib \
+  $(LANG)@exe@ \
+  installable_$(LANG)@exe@ \
 
 
 clean: testclean
diff -urN languages/abc/config/makefiles/root.in languages/abc/config/makefiles/root.in
--- languages/abc/config/makefiles/root.in	2008-06-24 17:20:00.000000000 +0000
+++ languages/abc/config/makefiles/root.in	2008-07-26 09:32:39.296875000 +0000
@@ -1,12 +1,17 @@
-# $Id: root.in 28657 2008-06-23 00:33:41Z coke $
+# $Id: root.in 28657 2008-06-23 00:33:41Z coke $ -*- Makefile -*-
 
 ## arguments we want to run parrot with
 PARROT_ARGS =
 
 ## configuration settings
+LANG          = abc
 BUILD_DIR     = @build_dir@
 LOAD_EXT      = @load_ext@
 O             = @o@
+BIN_DIR       = @bin_dir@
+LIB_DIR       = @lib_dir@
+DOC_DIR       = @doc_dir@
+MANDIR	      = @mandir@
 
 ## Setup some commands
 LN_S          = @lns@
@@ -15,8 +20,10 @@
 CP            = @cp@
 PARROT        = ../../[EMAIL PROTECTED]@
 CAT           = $(PERL) -MExtUtils::Command -e cat
+PBC_TO_EXE    = ../../[EMAIL PROTECTED]@
 BUILD_DYNPMC  = $(PERL) $(BUILD_DIR)/tools/build/dynpmc.pl
 RECONFIGURE   = $(PERL) $(BUILD_DIR)/tools/dev/reconfigure.pl
+POD2MAN	      = pod2man
 #CONDITIONED_LINE(darwin):
 #CONDITIONED_LINE(darwin):# MACOSX_DEPLOYMENT_TARGET must be defined for OS X compilation/linking
 #CONDITIONED_LINE(darwin):export MACOSX_DEPLOYMENT_TARGET := @osx_version@
@@ -45,11 +52,15 @@
 
 # PMCS = abc
 # PMC_SOURCES = $(PMC_DIR)/abc.pmc
+DOCS = MAINTAINER README TODO
 
 # the default target
 abc.pbc: $(PARROT) $(SOURCES)
 	$(PARROT) $(PARROT_ARGS) -o abc.pbc abc.pir
 
+$(LANG)@exe@: $(LANG).pbc
+	$(PBC_TO_EXE) $(LANG).pbc
+
 src/gen_grammar.pir: $(PERL6GRAMMAR) src/parser/grammar.pg src/parser/grammar-oper.pg
 	$(PARROT) $(PARROT_ARGS) $(PERL6GRAMMAR) \
 	    --output=src/gen_grammar.pir \
@@ -69,9 +80,16 @@
 	cd $(PMC_DIR) && $(BUILD_DYNPMC) linklibs $(PMCS)
 	cd $(PMC_DIR) && $(BUILD_DYNPMC) copy --destination=$(PARROT_DYNEXT) $(PMCS)
 
+installable : installable_$(LANG)@exe@ $(ABC_GROUP)
+	cp installable_$(LANG)@exe@ $(BUILD_DIR)/
+	cd $(PMC_DIR) && $(BUILD_DYNPMC) copy --destination=$(PARROT_DYNEXT) $(PMCS)
+
+installable_$(LANG)@exe@ : $(LANG).pbc
+	$(PBC_TO_EXE) $(LANG).pbc --install
+
 # regenerate the Makefile
 Makefile: config/makefiles/root.in
-	cd $(BUILD_DIR) && $(RECONFIGURE) --step=gen::languages --languages=abc
+	cd $(BUILD_DIR) && $(RECONFIGURE) --step=gen::languages --languages=$(LANG)
 
 # This is a listing of all targets, that are meant to be called by users
 help:
@@ -80,8 +98,11 @@
 	@echo ""
 	@echo "  all:               abc.pbc"
 	@echo "                     This is the default."
+	@echo "  install:           install the installable targets and docs."
+	@echo ""
 	@echo "Testing:"
 	@echo "  test:              Run the test suite."
+	@echo "  test-installable:  Test self-hosting targets."
 	@echo "  testclean:         Clean up test results."
 	@echo ""
 	@echo "Cleaning:"
@@ -96,6 +117,16 @@
 test: all
 	prove -r t
 
+# TODO: rename build_dir. basic run for missing libs
+test-installable : installable
+	echo "2-1" | ./installable_$(LANG)@exe@
+
+install : installable
+	cp installable_$(LANG)@exe@ $(DESTDIR)$(BIN_DIR)/parrot-$(LANG)@exe@
+	pod2man $(LANG).pir > $(DESTDIR)$(MANDIR)/man1/parrot-$(LANG).1
+	mkdir $(DESTDIR)$(DOC_DIR)/languages/$(LANG)
+	cp $(DOCS) $(DESTDIR)$(DOC_DIR)/languages/$(LANG)
+
 testclean:
 	$(RM_RF) "t/*.pir" "t/*.out"
 
@@ -114,7 +145,8 @@
   $(PMC_DIR)/*.manifest \
   $(PMC_DIR)/*.pdb \
   $(PMC_DIR)/*.lib \
-
+  $(LANG)@exe@ \
+  installable_$(LANG)@exe@ \
 
 clean: testclean
 	$(RM_RF) $(CLEANUPS)
diff -urN languages/befunge/config/makefiles/root.in languages/befunge/config/makefiles/root.in
--- languages/befunge/config/makefiles/root.in	2008-06-24 17:20:00.000000000 +0000
+++ languages/befunge/config/makefiles/root.in	2008-07-26 09:29:51.390625000 +0000
@@ -1,31 +1,44 @@
-# $Id: root.in 28657 2008-06-23 00:33:41Z coke $
+# $Id: root.in 28657 2008-06-23 00:33:41Z coke $ -*- Makefile -*-
 
 # Makefile for languages/befunge
+LANG = befunge
+
+## configuration settings
+BIN_DIR       = @bin_dir@
+LIB_DIR       = @lib_dir@
+DOC_DIR       = @doc_dir@
+MANDIR	      = @mandir@
 
 # Setup of some commands
 PARROT     = ../../parrot
 PERL       = @perl@
 RM_F       = @rm_f@
+POD2MAN	      = pod2man
 #CONDITIONED_LINE(darwin):
 #CONDITIONED_LINE(darwin):# MACOSX_DEPLOYMENT_TARGET must be defined for OS X compilation/linking
 #CONDITIONED_LINE(darwin):export MACOSX_DEPLOYMENT_TARGET := @osx_version@
 
+DOCS = MAINTAINER README Changes
+
 default: all
 
 help :
 	@echo ""
 	@echo "Following targets are available for the user:"
 	@echo ""
-	@echo "  build:             Create befunge.pbc"
+	@echo "  all:               befunge.pbc"
 	@echo "                     This is the default."
 	@echo ""
-	@echo "  test:              run the test suite,"
+	@echo "  install:           Install the installable targets and docs."
+	@echo ""
+	@echo "  test:              Run the test suite,"
+	@echo "  test-installable:  Test self-hosting targets."
 	@echo ""
-	@echo "  clean:             clean up temporary files"
+	@echo "  clean:             Clean up temporary files"
 	@echo ""
-	@echo "  realclean:         clean up generated files"
+	@echo "  realclean:         Clean up generated files"
 	@echo ""
-	@echo "  help:              print this help message"
+	@echo "  help:              Print this help message"
 
 
 all: build
@@ -35,6 +48,16 @@
 befunge.pbc: befunge.pasm debug.pasm flow.pasm io.pasm load.pasm maths.pasm stack.pasm
 	$(PARROT) -o befunge.pbc befunge.pasm
 
+installable_$(LANG)@exe@: $(LANG).pbc
+	$(PBC_TO_EXE) $(LANG).pbc --install
+
+installable : installable_$(LANG)@exe@
+	cp installable_$(LANG)@exe@ $(BUILD_DIR)/
+
+# regenerate the Makefile
+Makefile: config/makefiles/root.in
+	cd $(BUILD_DIR) && $(RECONFIGURE) --step=gen::languages --languages=$(LANG)
+
 test: befunge.pbc
 	cd .. && $(PERL) t/harness --languages=befunge
 
diff -urN languages/bf/config/makefiles/root.in languages/bf/config/makefiles/root.in
--- languages/bf/config/makefiles/root.in	2008-06-24 17:19:59.000000000 +0000
+++ languages/bf/config/makefiles/root.in	2008-07-26 10:59:54.312500000 +0000
@@ -1,11 +1,21 @@
+# -*- Makefile -*-
+LANG = bf
+BIN_DIR       = @bin_dir@
+LIB_DIR       = @lib_dir@
+DOC_DIR       = @doc_dir@
+MANDIR	      = @mandir@
+
 RM_F = @rm_f@
 PERL = @perl@
-PARROT=../../parrot
+PARROT = ../../[EMAIL PROTECTED]@
+PBC_TO_EXE    = ../../[EMAIL PROTECTED]@
 #CONDITIONED_LINE(darwin):
 #CONDITIONED_LINE(darwin):# MACOSX_DEPLOYMENT_TARGET must be defined for OS X compilation/linking
 #CONDITIONED_LINE(darwin):export MACOSX_DEPLOYMENT_TARGET := @osx_version@
 
-default: build
+DOCS = MAINTAINER README
+
+all : build
 
 help :
 	@echo ""
@@ -22,11 +32,31 @@
 	@echo ""
 	@echo "  help:              print this help message"
 
-test: build
+test : build
 	$(PERL) -Ilib -I../../lib t/harness
 
 build: bf.pbc bfc.pbc bfco.pbc
 
+installable: [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@
+
[EMAIL PROTECTED]@: bf.pbc
+	$(PBC_TO_EXE) bf.pbc
+
[EMAIL PROTECTED]@: bfc.pbc
+	$(PBC_TO_EXE) bfc.pbc
+
[EMAIL PROTECTED]@: bfco.pbc
+	$(PBC_TO_EXE) bfco.pbc
+
[EMAIL PROTECTED]@: bf.pbc
+	$(PBC_TO_EXE) bf.pbc --install
+
[EMAIL PROTECTED]@: bfc.pbc
+	$(PBC_TO_EXE) bfc.pbc --install
+
[EMAIL PROTECTED]@: bfco.pbc
+	$(PBC_TO_EXE) bfco.pbc --install
+
 bf.pbc: bf.pasm
 	$(PARROT) -o bf.pbc bf.pasm
 
@@ -36,6 +66,20 @@
 bfco.pbc: bfco.pir
 	$(PARROT) -o bfco.pbc bfco.pir
 
+# TODO: rename build_dir. basic run for missing libs
+test-installable : installable
+	./[EMAIL PROTECTED]@ test.bf
+	./[EMAIL PROTECTED]@ test.bf
+	./[EMAIL PROTECTED]@ test.bf
+
+install : installable
+	cp installable_$(LANG)@exe@ $(DESTDIR)$(BIN_DIR)/parrot-$(LANG)@exe@
+	cp [EMAIL PROTECTED]@ $(DESTDIR)$(BIN_DIR)/[EMAIL PROTECTED]@
+	cp [EMAIL PROTECTED]@ $(DESTDIR)$(BIN_DIR)/[EMAIL PROTECTED]@
+	pod2man $(LANG).pir > $(DESTDIR)$(MANDIR)/man1/parrot-$(LANG).1
+	mkdir $(DESTDIR)$(DOC_DIR)/languages/$(LANG)
+	cp $(DOCS) $(DESTDIR)$(DOC_DIR)/languages/$(LANG)
+
 clean:
 	$(RM_F) core "*.pbc" "*~"
 
diff -urN languages/c99/config/makefiles/root.in languages/c99/config/makefiles/root.in
--- languages/c99/config/makefiles/root.in	2008-06-24 17:20:00.000000000 +0000
+++ languages/c99/config/makefiles/root.in	2008-07-26 10:59:41.921875000 +0000
@@ -1,4 +1,4 @@
-## $Id: root.in 28657 2008-06-23 00:33:41Z coke $
+## $Id: root.in 28657 2008-06-23 00:33:41Z coke $ -*- Makefile -*-
 
 ## arguments we want to run parrot with
 PARROT_ARGS =
@@ -15,6 +15,7 @@
 CP            = @cp@
 PARROT        = ../../[EMAIL PROTECTED]@
 CAT           = $(PERL) -MExtUtils::Command -e cat
+PBC_TO_EXE    = ../../[EMAIL PROTECTED]@
 BUILD_DYNPMC  = $(PERL) $(BUILD_DIR)/tools/build/dynpmc.pl
 RECONFIGURE   = $(PERL) $(BUILD_DIR)/tools/dev/reconfigure.pl
 #CONDITIONED_LINE(darwin):
@@ -51,6 +52,12 @@
 	$(PARROT) $(PARROT_ARGS) -o c99.pbc c99.pir
 	cd src/cpp; $(MAKE)
 
[EMAIL PROTECTED]@: c99.pbc
+	$(PBC_TO_EXE) c99.pbc
+
[EMAIL PROTECTED]@: c99.pbc
+	$(PBC_TO_EXE) c99.pbc --install
+
 src/gen_grammar.pir: $(PERL6GRAMMAR) src/parser/grammar.pg
 	$(PARROT) $(PARROT_ARGS) $(PERL6GRAMMAR) \
 	    --output=src/gen_grammar.pir \
@@ -71,7 +78,7 @@
 
 # regenerate the Makefile
 Makefile: config/makefiles/root.in
-	cd $(BUILD_DIR) && $(RECONFIGURE) --step=gen::languages --languages=c
+	cd $(BUILD_DIR) && $(RECONFIGURE) --step=gen::languages --languages=c99
 
 # This is a listing of all targets, that are meant to be called by users
 help:
diff -urN languages/cardinal/config/makefiles/root.in languages/cardinal/config/makefiles/root.in
--- languages/cardinal/config/makefiles/root.in	2008-06-24 17:19:59.000000000 +0000
+++ languages/cardinal/config/makefiles/root.in	2008-07-26 10:59:49.187500000 +0000
@@ -1,4 +1,4 @@
-## $Id: root.in 28657 2008-06-23 00:33:41Z coke $
+## $Id: root.in 28657 2008-06-23 00:33:41Z coke $ -*- Makefile -*-
 
 ## arguments we want to run parrot with
 PARROT_ARGS =
@@ -15,6 +15,7 @@
 CP            = @cp@
 PARROT        = ../../[EMAIL PROTECTED]@
 CAT           = $(PERL) -MExtUtils::Command -e cat
+PBC_TO_EXE    = ../../[EMAIL PROTECTED]@
 BUILD_DYNPMC  = $(PERL) $(BUILD_DIR)/tools/build/dynpmc.pl
 RECONFIGURE   = $(PERL) $(BUILD_DIR)/tools/dev/reconfigure.pl
 #CONDITIONED_LINE(darwin):
@@ -57,6 +58,12 @@
 cardinal.pbc: $(PARROT) $(SOURCES)
 	$(PARROT) $(PARROT_ARGS) -o cardinal.pbc cardinal.pir
 
[EMAIL PROTECTED]@: cardinal.pbc
+	$(PBC_TO_EXE) cardinal.pbc
+
[EMAIL PROTECTED]@: cardinal.pbc
+	$(PBC_TO_EXE) cardinal.pbc --install
+
 src/gen_grammar.pir: $(PERL6GRAMMAR) src/parser/grammar.pg
 	$(PARROT) $(PARROT_ARGS) $(PERL6GRAMMAR) \
 	    --output=src/gen_grammar.pir \
@@ -107,6 +114,8 @@
 
 CLEANUPS = \
   cardinal.pbc \
+  [EMAIL PROTECTED]@ \
+  [EMAIL PROTECTED]@ \
   src/gen_grammar.pir \
   src/gen_actions.pir \
   src/gen_builtins.pir \
diff -urN languages/dotnet/config/Makefile.in languages/dotnet/config/Makefile.in
--- languages/dotnet/config/Makefile.in	2008-06-24 17:20:00.000000000 +0000
+++ languages/dotnet/config/Makefile.in	2008-07-25 16:59:47.796875000 +0000
@@ -16,6 +16,7 @@
 PARROT   = ${trans_parrot_path}${slash}parrot${exe}
 MONOLIB  = ${trans_mono_lib_path}
 PBCMERGE = ${trans_parrot_path}${slash}pbc_merge${exe}
+PBC_TO_EXE = ${trans_parrot_path}${slash}pbc_to_exe.exe
 PMCBUILD = $(PERL) ${build_dir}${slash}tools${slash}build${slash}dynpmc.pl
 OPSBUILD = $(PERL) ${build_dir}${slash}tools${slash}build${slash}dynoplibs.pl
 DESTDIR  = ${build_dir}${slash}runtime${slash}parrot${slash}dynext
@@ -60,6 +61,8 @@
 all : pmc/dotnet$(LOAD_EXT) ops/dotnet_ops$(LOAD_EXT) src/it.pbc \
       src/builtins.pbc src/translib.pbc net2pbc.pbc
 
+installable : net2pbc.pbc installable_net2pbc$exe
+
 pmc/dotnet$(LOAD_EXT) : $(PMC_FILES) pmc/structures.h pmc/tableinfo.h
 	@cd $(PMCDIR) && $(PMCBUILD) generate $(PMCS)
 	@cd $(PMCDIR) && $(PMCBUILD) compile $(PMCS)
@@ -91,7 +94,17 @@
 	$(PBCMERGE) -o net2pbc.pbc src/net2pbc.pbc src/translib.pbc
 
 class-library : net2pbc.pbc
-${trans_class_library}
+	${trans_class_library}
+
+# regenerate the Makefile
+Makefile: config/Makefile.in
+	$(PERL) Configure.pl
+
+net2pbc$exe : net2pbc.pbc
+	$(PBC_TO_EXE) net2pbc.pbc
+
+installable_net2pbc$exe : net2pbc.pbc
+	$(PBC_TO_EXE) net2pbc.pbc --install
 
 
 # PER FILE RULES AND DEPENDENCIES
@@ -133,6 +146,15 @@
 test : all
 	$(PERL) -It t/harness
 
+# TODO: rename build_dir. basic run for missing libs
+installable_test : installable
+	installable_net2pbc$exe
+
+install : all installable
+	mkdir ${build_dir}${slash}runtime${slash}bin
+	cp installable_net2pbc$exe ${build_dir}${slash}runtime${slash}bin${slash}parrot-net2pbc$exe
+	@cd $(PMCDIR) && $(PMCBUILD) copy "--destination=$(DESTDIR)" $(PMCS)
+	@cd $(PMCDIR) && $(PMCBUILD) copy "--destination=$(DESTDIR)" $(OPLIBS)
 
 # CLEANUP TARGETS
 # ###############
diff -urN languages/lua/config/makefiles/root.in languages/lua/config/makefiles/root.in
--- languages/lua/config/makefiles/root.in	2008-06-24 17:19:59.000000000 +0000
+++ languages/lua/config/makefiles/root.in	2008-07-26 11:06:50.312500000 +0000
@@ -1,9 +1,14 @@
+# $Id: root.in 28657 2008-06-23 00:33:41Z coke $ -*- Makefile -*-
 # Copyright (C) 2005-2008, The Perl Foundation.
-# $Id: root.in 28657 2008-06-23 00:33:41Z coke $
 
 ## configuration settings
+LANG     = lua
 O        = @o@
 LOAD_EXT = @load_ext@
+BIN_DIR  = @bin_dir@
+LIB_DIR  = @lib_dir@
+DOC_DIR  = @doc_dir@
+MANDIR	 = @mandir@
 
 ## Setup some commands
 MAKE    = @make_c@
@@ -94,6 +99,8 @@
 GEN_PBC = \
  lua.pbc
 
+DOCS = MAINTAINER doc/running.pod doc/status.pod
+
 all: \
  $(PMCDIR)/lua_group$(LOAD_EXT) \
  $(LIB_PBCS) \
@@ -128,11 +135,15 @@
 	$(TGE) --output=src/POSTGrammar_gen.pir src/POSTGrammar.tg
 
 lua.pbc: lua.pir src/lua51.pir src/grammar51.pir src/lua51_gen.pir src/PASTGrammar_gen.pir src/POSTGrammar_gen.pir $(LIB_SRCS)
-	$(PARROT) -o lua.pbc --output-pbc lua.pir
+	$(PARROT) -o lua_i.pbc --output-pbc lua.pir
+	$(PBC_MERGE) -o lua.pbc lua_i.pbc ../../compilers/tge/TGE/Rule.pbc
 
 [EMAIL PROTECTED]@: lua.pbc
 	$(PBC_TO_EXE) lua.pbc
 
[EMAIL PROTECTED]@: lua.pbc
+	$(PBC_TO_EXE) lua.pbc --install
+
 $(LIBPATH)/lualibs.pbc: $(LIB_PBCS)
 	$(PBC_MERGE) -o $(LIBPATH)/lualibs.pbc $(LIB_PBCS)
 
@@ -244,6 +255,15 @@
 test: all
 	cd .. && $(PERL) t/harness --languages=lua
 
+# TODO: rename build_dir. basic run for missing libs
+test-installable : installable
+	echo "a=1" | ./installable_$(LANG)@exe@
+
+install : installable
+	cp installable_$(LANG)@exe@ $(DESTDIR)$(BIN_DIR)/parrot-$(LANG)@exe@
+	pod2man doc/running.pod > $(DESTDIR)$(MANDIR)/man1/parrot-$(LANG).1
+	mkdir $(DESTDIR)$(DOC_DIR)/languages/$(LANG)
+	cp $(DOCS) $(DESTDIR)$(DOC_DIR)/languages/$(LANG)
 
 TEST_CLEANERS = \
  "t/pmc/*.pir" \
@@ -258,6 +278,7 @@
 
 BUILD_CLEANERS = \
  [EMAIL PROTECTED]@ \
+ [EMAIL PROTECTED]@ \
  lua$(O) \
  lua.c \
  "*.pbc" \
diff -urN languages/perl6/config/makefiles/root.in languages/perl6/config/makefiles/root.in
--- languages/perl6/config/makefiles/root.in	2008-07-11 06:47:06.000000000 +0000
+++ languages/perl6/config/makefiles/root.in	2008-07-21 20:14:57.250000000 +0000
@@ -113,6 +113,9 @@
 perl6.pbc: $(PARROT) $(SOURCES)
 	$(PARROT) $(PARROT_ARGS) -o perl6.pbc perl6.pir
 
+installable_perl6$(EXE): perl6.pbc
+	$(PBC_TO_EXE) perl6.pbc --install
+
 src/gen_grammar.pir: $(PERL6GRAMMAR) src/parser/grammar.pg src/parser/grammar-oper.pg
 	$(PARROT) $(PARROT_ARGS) $(PERL6GRAMMAR) \
 	    --output=src/gen_grammar.pir \

Reply via email to