diff options
author | Reini Urban <rurban@x-ray.at> | 2008-07-28 14:55:40 +0200 |
---|---|---|
committer | H.Merijn Brand <h.m.brand@xs4all.nl> | 2008-08-11 13:15:08 +0000 |
commit | 5f9145a3c5d730d3a29901fe5c70a26f92663207 (patch) | |
tree | b717470dbddac359aca0f6e6ac8deebc45fcba7e | |
parent | 07a28ea7fedd308f0ccac00940bfc1b314e01e37 (diff) | |
download | perl-5f9145a3c5d730d3a29901fe5c70a26f92663207.tar.gz |
Cygwin build harmonization, remove cygwin/Makefile.SHs
From: "Reini Urban" <rurban@x-ray.at>
Message-ID: <6910a60807280355g129511d9v61c9763c3fd12a27@mail.gmail.com>
p4raw-id: //depot/perl@34200
-rw-r--r-- | MANIFEST | 1 | ||||
-rw-r--r-- | Makefile.SH | 29 | ||||
-rw-r--r-- | cygwin/Makefile.SHs | 173 | ||||
-rwxr-xr-x | installperl | 7 | ||||
-rw-r--r-- | lib/ExtUtils/CBuilder/Platform/cygwin.pm | 9 | ||||
-rw-r--r-- | lib/ExtUtils/t/Embed.t | 7 |
6 files changed, 23 insertions, 203 deletions
@@ -42,7 +42,6 @@ Cross/TODO Cross-compilation Cross/warp Cross-compilation cv.h Code value header cygwin/cygwin.c Additional code for Cygwin port -cygwin/Makefile.SHs Shared library generation for Cygwin port deb.c Debugging routines djgpp/config.over DOS/DJGPP port djgpp/configure.bat DOS/DJGPP port diff --git a/Makefile.SH b/Makefile.SH index fa109a880d..e925558ea6 100644 --- a/Makefile.SH +++ b/Makefile.SH @@ -68,7 +68,8 @@ true) -install_name \$(shrpdir)/\$@" ;; cygwin*) - linklibperl="-lperl" + shrpldflags="$shrpldflags -Wl,--out-implib=libperl.dll.a -Wl,--image-base,0x52000000" + linklibperl="-L. -lperl" ;; sunos*) linklibperl="-lperl" @@ -516,19 +517,9 @@ miniperlmain$(OBJ_EXT): miniperlmain.c patchlevel.h perlmain.c: miniperlmain.c config.sh $(FIRSTMAKEFILE) sh writemain $(DYNALOADER) $(static_ext) > perlmain.c -!NO!SUBS! -case "$osname" in -cygwin) - ;; # Let cygwin/Makefile.SHs do its work. -*) - $spitshell >>Makefile <<'!NO!SUBS!' perlmain$(OBJ_EXT): perlmain.c $(CCCMD) $(PLDLFLAGS) $*.c -!NO!SUBS! - ;; -esac -$spitshell >>Makefile <<'!NO!SUBS!' # The file ext.libs is a list of libraries that must be linked in # for static extensions, e.g. -lm -lgdbm, etc. The individual # static extension Makefile's add to it. @@ -601,9 +592,22 @@ perl5.def: $(MINIPERLEXP) makedef.pl config.sh $(SYM) $(SYMH) miniperl.map !NO!SUBS! ;; +cygwin) + $spitshell >>Makefile <<'!NO!SUBS!' +cygwin.c: cygwin/cygwin.c + $(LNS) cygwin/cygwin.c + +LIBPERL_NONSHR = libperl$(LIB_EXT) + +$(LIBPERL_NONSHR): $(obj) + $(RMS) $(LIBPERL_NONSHR) + $(AR) rcu $(LIBPERL_NONSHR) $(obj) + +!NO!SUBS! + ;; esac -if test -r $Makefile_s ; then +if test -s $Makefile_s ; then . $Makefile_s $spitshell >>Makefile <<!GROK!THIS! @@ -1172,7 +1176,6 @@ _cleaner2: -rmdir lib/threads lib/XS -rmdir lib/CPANPLUS/Dist/Build/t/dummy-* -rmdir lib/CPANPLUS/t/dummy-cpanplus lib/CPANPLUS/t/dummy-localmirror - -rm -f cygcrypt-0.dll cygwin1.dll -rm -f lib/ExtUtils/CBuilder/t/libcompilet.dll.a -rm -f lib/ExtUtils/ParseXS/t/libXSTest.dll.a diff --git a/cygwin/Makefile.SHs b/cygwin/Makefile.SHs deleted file mode 100644 index b360b01d0d..0000000000 --- a/cygwin/Makefile.SHs +++ /dev/null @@ -1,173 +0,0 @@ -# This file is read by Makefile.SH to produce rules for $(LIBPERL) (and -# some additional rules as well). - -# Rerun `sh Makefile.SH; make depend' after making any change. - -# Additional rules supported: libperl.a (for static linking), -# ld2 and perlld removed -# - -#! /bin/sh -case $PERL_CONFIG_SH in -'') - if test -f config.sh; then TOP=.; - elif test -f ../config.sh; then TOP=..; - elif test -f ../../config.sh; then TOP=../..; - elif test -f ../../../config.sh; then TOP=../../..; - elif test -f ../../../../config.sh; then TOP=../../../..; - else - echo "Can't find config.sh."; exit 1 - fi - . $TOP/config.sh - ;; -esac - -addtopath=`pwd | sed -e 's/ /\\\ /g'` -$spitshell >>Makefile <<!GROK!THIS! - -cygwin.c: cygwin/cygwin.c - \$(LNS) cygwin/cygwin.c - -!GROK!THIS! - -# make sure that all library names are not malformed -libperl=`echo $libperl|sed -e s,\\\..*,,` -linklibperl=-l`echo $libperl|sed -e s,^lib,,` -vers=`echo $version|tr '.' '_'` -dllname=`echo $libperl|sed -e s,^lib,cyg,``echo $vers|sed -e s,_[0-9]$,,` -# append "d" suffix to -DDEBUGGING build: cygperl5_10d.dll -case $config_args in - *DEBUGGING*) - dllname="${dllname}"d - ;; -esac -# added -mms-bitfields to be able to link to MSVC win32 bitfields libs -# (4 byte instead of 2 byte alignment) - -$spitshell >>Makefile <<!GROK!THIS! -LIBPERL = $libperl -LLIBPERL= $linklibperl -DLLNAME= $dllname -CLDFLAGS= -L$addtopath $ldflags -LDDLFLAGS = --shared -L$addtopath $ldflags -CCFLAGS=$ccflags -mms-bitfields -PLDLFLAGS = -CAT = $cat -AWK = $awk -!GROK!THIS! - -case "$useshrplib" in -true) - $spitshell >>Makefile <<'!NO!SUBS!' -cwobj = $(obj) - -# override default rule (NB: make croaks!) to force dll usage -perlmain$(OBJ_EXT): perlmain.c - $(CCCMD) $(PLDLFLAGS) -DUSEIMPORTLIB $*.c - -# library used to make statically linked executables -# miniperl is linked against it to avoid libperl.dll locking -$(LIBPERL)$(LIB_EXT): $& $(cwobj) - $(AR) rcu $@ $(cwobj) - -# dll and import library -$(LIBPERL).dll$(LIB_EXT): $& $(cwobj) - $(LDLIBPTH) $(CC) $(SHRPLDFLAGS) -o $(DLLNAME)$(DLSUFFIX) -Wl,--out-implib=$@ \ - $(cwobj) $(libs) - -# How to build executables. - -# The miniperl -w -MExporter line is a basic cheap test to catch errors -# before make goes on to run preplibrary and then MakeMaker on extensions. -# This is very handy because later errors are often caused by miniperl -# build problems but that's not obvious to the novice. -# The Module used here must not depend on Config or any extensions. - -miniperl.exe \ -miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL)$(LIB_EXT) opmini$(OBJ_EXT) - $(LDLIBPTH) $(CC) $(CLDFLAGS) -o miniperl miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) $(LIBPERL)$(LIB_EXT) $(libs) - $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest - -perl.exe \ -perl: $& perlmain$(OBJ_EXT) $(LIBPERL).dll$(LIB_EXT) $(DYNALOADER) $(static_ext) ext.libs - $(SHRPENV) $(LDLIBPTH) $(CC) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) - -pureperl: $& perlmain$(OBJ_EXT) $(LIBPERL).dll$(LIB_EXT) $(DYNALOADER) $(static_ext) ext.libs - $(SHRPENV) $(LDLIBPTH) purify $(CC) $(CLDFLAGS) $(CCDLFLAGS) -o pureperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) - -purecovperl: $& perlmain$(OBJ_EXT) $(LIBPERL).dll$(LIB_EXT) $(DYNALOADER) $(static_ext) ext.libs - $(SHRPENV) $(LDLIBPTH) purecov $(CC) $(CLDFLAGS) $(CCDLFLAGS) -o purecovperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) - -quantperl: $& perlmain$(OBJ_EXT) $(LIBPERL).dll$(LIB_EXT) $(DYNALOADER) $(static_ext) ext.libs - $(SHRPENV) $(LDLIBPTH) quantify $(CC) $(CLDFLAGS) $(CCDLFLAGS) -o quantperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) - -!NO!SUBS! - ;; -*) -$spitshell >>Makefile <<'!NO!SUBS!' -cwobj = $(obj) - -# perl library -$(LIBPERL)$(LIB_EXT): $& $(cwobj) - $(AR) rcu $@ $(cwobj) - -# How to build executables. - -# The miniperl -w -MExporter line is a basic cheap test to catch errors -# before make goes on to run preplibrary and then MakeMaker on extensions. -# This is very handy because later errors are often caused by miniperl -# build problems but that's not obvious to the novice. -# The Module used here must not depend on Config or any extensions. - -miniperl.exe \ -miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL)$(LIB_EXT) opmini$(OBJ_EXT) - $(LDLIBPTH) $(CC) $(CLDFLAGS) -o miniperl miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) $(LLIBPERL) $(libs) - $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest - -perl.exe \ -perl: $& perlmain$(OBJ_EXT) $(LIBPERL)$(LIB_EXT) $(DYNALOADER) $(static_ext) ext.libs - $(SHRPENV) $(LDLIBPTH) $(CC) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) -Wl,-Bstatic $(LLIBPERL) -Wl,-Bdynamic `cat ext.libs` $(libs) - -pureperl: $& perlmain$(OBJ_EXT) $(LIBPERL)$(LIB_EXT) $(DYNALOADER) $(static_ext) ext.libs - $(SHRPENV) $(LDLIBPTH) purify $(CC) $(CLDFLAGS) $(CCDLFLAGS) -o pureperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) - -purecovperl: $& perlmain$(OBJ_EXT) $(LIBPERL)$(LIB_EXT) $(DYNALOADER) $(static_ext) ext.libs - $(SHRPENV) $(LDLIBPTH) purecov $(CC) $(CLDFLAGS) $(CCDLFLAGS) -o purecovperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) - -quantperl: $& perlmain$(OBJ_EXT) $(LIBPERL)$(LIB_EXT) $(DYNALOADER) $(static_ext) ext.libs - $(SHRPENV) $(LDLIBPTH) quantify $(CC) $(CLDFLAGS) $(CCDLFLAGS) -o quantperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) - -!NO!SUBS! - ;; -esac - -# libperl.a is _the_ library both in dll and static cases -# $(LIBPERL)$(LIB_EXT) expands to this name dependless of build model -# -# NOTE: The "-Wl,-Bstatic $(LLIBPERL) -Wl,-Bdynamic" is required to give -# the import library linking priority over the dynamic library, since both -# the .dll and .a are in the same directory. When the new standard for -# naming import/dynamic/static libraries emerges this should be updated. -# -$spitshell >>Makefile <<'!NO!SUBS!' - - -!NO!SUBS! - -# suid perl is removed - i've never seen suid scripts for win32 - -############################################## -# additional targets - -$spitshell >>Makefile <<'!NO!SUBS!' - -DIST_DIRECTORY = .dist - -distdir: miniperl - -mkdir $(DIST_DIRECTORY) - ./miniperl -Ilib '-MExtUtils::Manifest' \ - -e "ExtUtils::Manifest::manicopy(ExtUtils::Manifest::maniread(),'$(DIST_DIRECTORY)')" - -test_prep: - -!NO!SUBS! diff --git a/installperl b/installperl index 623034eead..c717750c50 100755 --- a/installperl +++ b/installperl @@ -253,11 +253,8 @@ if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin) { if ($Is_Cygwin) { $perldll = $libperl; - my $v_e_r_s = substr($ver,0,-2); $v_e_r_s =~ tr/./_/; - $perldll =~ s/(\..*)?$/$v_e_r_s.$dlext/; - $perldll =~ s/^lib/cyg/; } else { - $perldll = 'perl511.' . $dlext; + $perldll = 'perl5'.$Config{patchlevel}.'.'.$dlext; } if ($dlsrc ne "dl_none.xs") { @@ -338,7 +335,7 @@ if ($d_dosuid) { # Install library files. my ($do_installarchlib, $do_installprivlib) = (0, 0); -my $vershort = $Is_Cygwin ? substr($ver,0,-2) : $ver; +my $vershort = ($Is_Cygwin and !$Config{usedevel}) ? substr($ver,0,-2) : $ver; mkpath($installprivlib, $opts{verbose}, 0777); mkpath($installarchlib, $opts{verbose}, 0777); diff --git a/lib/ExtUtils/CBuilder/Platform/cygwin.pm b/lib/ExtUtils/CBuilder/Platform/cygwin.pm index 186bf7fde9..f72f5f7aa3 100644 --- a/lib/ExtUtils/CBuilder/Platform/cygwin.pm +++ b/lib/ExtUtils/CBuilder/Platform/cygwin.pm @@ -10,17 +10,16 @@ $VERSION = '0.23'; sub link_executable { my $self = shift; - # $Config{ld} is set up as a special script for building - # perl-linkable libraries. We don't want that here. - local $self->{config}{ld} = 'gcc'; + # $Config{ld} is okay. revert the stupid Unix cc=ld override + local $self->{config}{cc} = $self->{config}{ld}; return $self->SUPER::link_executable(@_); } sub link { my ($self, %args) = @_; - + # libperl.dll.a fails with -Uusedl. -L../CORE -lperl is better $args{extra_linker_flags} = [ - File::Spec->catdir($self->perl_inc(), 'libperl.dll.a'), + '-L'.$self->perl_inc().' -lperl', $self->split_like_shell($args{extra_linker_flags}) ]; diff --git a/lib/ExtUtils/t/Embed.t b/lib/ExtUtils/t/Embed.t index 79f6dbca3f..b9e954bab5 100644 --- a/lib/ExtUtils/t/Embed.t +++ b/lib/ExtUtils/t/Embed.t @@ -105,11 +105,6 @@ if ($^O eq 'VMS') { s!-bE:(\S+)!-bE:$perl_exp!; } } - elsif ($^O eq 'cygwin') { # Cygwin needs the shared libperl copied - my $v_e_r_s = substr($Config{version},0,-2); - $v_e_r_s =~ tr/./_/; - system("cp ../cygperl$v_e_r_s.dll ./"); # for test 1 - } elsif ($Config{'libperl'} !~ /\Alibperl\./) { # Everyone needs libperl copied if it's not found by '-lperl'. $testlib = $Config{'libperl'}; @@ -137,7 +132,7 @@ print "# $_\n" foreach @out; if ($^O eq 'VMS' && !$status) { print "# @cmd2\n"; - $status = system(join(' ',@cmd2)); + $status = system(join(' ',@cmd2)); } print (($status? 'not ': '')."ok 1\n"); |