Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: 4.2.0-pre-4



On Fri, 2004-03-12 at 18:58, Peter Stephenson wrote:
> Peter Stephenson wrote:
> > It ought to be possible to use `nm' on some other system to verify the
> > symbols that need exporting, and hence keep the list up to date, but I
> > don't think I'm going to have time for that.
> 
> I lied.  Should have waited to release 4.2.0-pre-4.  This patch (the
> first two hunks) will probably be needed on AIX.  Sent to zsh-users in
> case it affects anybody downloading that.
> 
> (I'm assuming that stdout@@GLIBC_2.0 don't need exporting...)
> 
> Index: Src/Zle/zle_misc.c
> ===================================================================
> RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_misc.c,v
> retrieving revision 1.10
> diff -u -r1.10 zle_misc.c
> --- Src/Zle/zle_misc.c	8 Mar 2004 11:44:14 -0000	1.10
> +++ Src/Zle/zle_misc.c	12 Mar 2004 18:40:07 -0000
> @@ -73,7 +73,7 @@
>  }
>  
>  /**/
> -int
> +mod_export int
>  selfinsertunmeta(char **args)
>  {
>      lastchar &= 0x7f;
> Index: Src/Zle/zle_utils.c
> ===================================================================
> RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_utils.c,v
> retrieving revision 1.8
> diff -u -r1.8 zle_utils.c
> --- Src/Zle/zle_utils.c	29 Oct 2003 19:17:48 -0000	1.8
> +++ Src/Zle/zle_utils.c	12 Mar 2004 18:40:07 -0000
> @@ -388,7 +388,7 @@
>   * The message must be metafied.                              */
>  
>  /**/
> -void mod_export
> +mod_export void
>  showmsg(char const *msg)
>  {
>      char const *p;
> Index: Util/check_exports
> ===================================================================
> RCS file: Util/check_exports
> diff -N Util/check_exports
> --- /dev/null	1 Jan 1970 00:00:00 -0000
> +++ Util/check_exports	12 Mar 2004 18:40:07 -0000
> @@ -0,0 +1,64 @@
> +#!/usr/local/bin/perl -w
> +
> +# Attempt to scan executable, libraries, and .export files after
> +# a zsh build to see if all necessary symbols appear in the .export file
> +# (and hence with `mod_export' in the source file).  This keeps AIX happy.
> +# Probably severely system dependent, but known to run on Fedora Core 1,
> +# at least.  Not needed on AIX itself... you can tell if doesn't link.
> +
> +if (! -f "zsh") {
> +    die "Can't file zsh, are we in the Src directory of the build?\n";
> +}
> +
> +my (%defined, %undefined, %exported);
> +
> +foreach my $file ("zsh", glob("*.so */*.so")) {
> +    next unless -f $file;
> +
> +    my $exports = $file;
> +    $exports =~ s/\.so//;
> +    $exports .= ".export";
> +    if (-f $exports) {
> +	open EXPORT, $exports  or  die "Can't read $exports: $!\n";
> +	my $href = $exported{$file} = { };
> +	while (<EXPORT>) {
> +	    next if /^#/;
> +	    chomp;
> +	    $href->{$_} = 1;
> +	}
> +	close EXPORT;
> +    } else {
> +	warn "Hmmm... no .exports file for $file\n";
> +    }
> +
> +    open PIPE, "nm $file |"  or  die "Can't popen nm";
> +    while (<PIPE>) {
> +	s/^[0-9a-f]*\s+//;
> +	my ($type, $sym) = split;
> +	# ignore local symbols (lower case)
> +	if ($type =~ /^[TBAD]/) {
> +	    if (!defined $defined{$sym}) {
> +		$defined{$sym} = $file;
> +	    }
> +	} elsif ($type eq 'U') {
> +	    # could skip undefined from zsh and zsh.so, but what the heck
> +	    my $ref = \$undefined{$sym};
> +	    if (defined $$ref) {
> +		push @$$ref, $file;
> +	    } else {
> +		$$ref = [ $file ];
> +	    }
> +	}
> +    }
> +    close PIPE  or  die "nm failed";
> +}
> +
> +foreach $sym (keys %undefined) {
> +    my $deffile = $defined{$sym};
> +    if (defined $deffile) {
> +	if (!$exported{$deffile}{$sym}) {
> +	    printf "%-20s: %-20s: %s\n", $sym, $defined{$sym},
> +	    join(" ", @{$undefined{$sym}});
> +	}
> +    }
> +}

Peter,

It has all finally compiled on AIX 5.2, and all seems to work correctly.
Thanks for taking the time to look at this - much appreciated.

Cheers,

			--ibraheem. 



Messages sorted by: Reverse Date, Date, Thread, Author