# New Ticket Created by Reini Urban # Please include the string: [perl #54780] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=54780 >
cygwin patch by Ronald Schmidt, checked ok by Reini Urban. 1. Doc patch to mention MSWin32 perl problems with cygwin parrot 2. Better Configure error when forgetting PATH=`pwd`/blib/lib This can be done for other platforms as well (via ldd) ==== I had two problems building parrot with cygwin and am proposing some minor patches and a small utility program to address them. The first problem I encountered was the failure of parrot to build with ActiveState Perl. If you have ActiveState Perl and cygwin installed under windows and have ActiveState Perl executable directories on your windows user PATH, then you may have a working perl under cygwin even if you did not install cygwin's perl. I found that ActiveState perl has a $^O OS variable result of 'MSWin32' rather than 'cygwin' breaking the parrot build in many places. I could not find an easy way to make the build work with ActiveState and one of my patches modifies README_cygwin.pod to note this issue. The second problem was that I forgot to add "`pwd`/blib/lib" to the path during an attempted build resulting in a dialog being presented repeatedly under windows Vista with an uninformative message. Cygwin executables under Windows XP seem to fail silently if a needed dll is missing which is somewhat more graceful but not much. I concocted a small build utility based on the cygwin program cygcheck to test for the problem and force make to fail with a graceful error if cygcheck reported back that miniparrot was missing the libparrot dll. Some small patches to some parts of the build system were needed to modify the Makefile appropriately. The patches and build utility are in the attached tar zip. I am not a regular Perl 6 developer and have not requested svn/svk access to the parrot build directories. If there is a better destination for this work please let me know. Ronald Schmidt ====
diff -u ./README_cygwin.pod.orig --- ./README_cygwin.pod.orig 2008-05-25 11:31:39.859375000 +0000 +++ ./README_cygwin.pod 2008-05-25 11:37:10.203125000 +0000 @@ -24,7 +24,8 @@ =item subversion If you use svn to get a copy of parrot, you should use the cygwin svn -and not the tortoiseSVN client to avoid build errors. +and not the tortoiseSVN client to avoid build errors. Similarly you will +need cygwin Perl rather than ActiveState or Strawberry Perl. =item ICU diff -u ./config/gen/makefiles/root.in.orig --- ./config/gen/makefiles/root.in.orig 2008-05-25 11:31:31.140625000 +0000 +++ ./config/gen/makefiles/root.in 2008-05-25 11:37:10.234375000 +0000 @@ -757,7 +757,7 @@ $(PARROT) -o $@ runtime/parrot/library/parrotlib.pir runtime/parrot/include/config.fpmc : myconfig config_lib.pasm $(MINIPARROT) - @echo Invoking Parrot to generate runtime/parrot/include/config.fpmc --cross your fingers + @cygchkdll@ @echo Invoking Parrot to generate runtime/parrot/include/config.fpmc --cross your fingers $(MINIPARROT) config_lib.pasm > $@ $(PARROT) : $(SRC_DIR)/main$(O) $(GEN_HEADERS) $(LIBPARROT) CFLAGS \ diff -u ./config/init/defaults.pm.orig --- ./config/init/defaults.pm.orig 2008-03-22 00:42:27.790250000 +0000 +++ ./config/init/defaults.pm 2008-05-25 11:37:10.218750000 +0000 @@ -197,6 +197,9 @@ make_set_make => $Config{make_set_make}, make_and => '&&', + # for cygwin + cygchkdll => '', + # make_c: Command to emulate GNU make's C<-C directory> option: chdir # to C<directory> before executing $(MAKE) make_c => '$(PERL) -e \'chdir shift @ARGV; system q{$(MAKE)}, @ARGV; exit $$? >> 8;\'', diff -u ./config/init/hints/cygwin.pm.orig --- ./config/init/hints/cygwin.pm.orig 2008-03-15 22:01:20.515625000 +0000 +++ ./config/init/hints/cygwin.pm 2008-05-25 11:37:10.234375000 +0000 @@ -33,7 +33,8 @@ has_dynamic_linking => 1, parrot_is_shared => 1, sym_export => '__declspec(dllexport)', - sym_import => '__declspec(dllimport)' + sym_import => '__declspec(dllimport)', + cygchkdll => "tools/build/cygchkdll.sh \$(MINIPARROT) \$(LIBPARROT)\n\t", ); # inet_aton needs to be defined on Cygwin. diff -u ./tools/build/cygchkdll.sh.orig --- ./tools/build/cygchkdll.sh.orig 2008-05-25 11:37:39.437500000 +0000 +++ ./tools/build/cygchkdll.sh 2008-05-19 19:15:50.000000000 +0000 @@ -0,0 +1,5 @@ +libname=${2##*/} +if cygcheck ./$1 | egrep "Error.*find.*$libname" >/dev/null ; then + echo "Could not find $2. Guessing you need to add `pwd`/blib/lib to PATH." + exit 1 +fi