#!/usr/bin/perl -w use strict qw(vars) ; require 5.006 ; use ExtUtils::MakeMaker ; use ExtUtils::Embed ; use Config ; use File::Copy ; no warnings ; BEGIN { eval { require File::Spec::Functions ; File::Spec::Functions->import() } ; if ($@) { *catfile = sub { return "$_[0]/$_[1]" } } } if ( $ARGV[0] =~ /renametree/i ) { renametree( $ARGV[1] , $ARGV[2] ) ; exit; } ######## # NAME # ######## my $NAME = 'PLJava' ; my $VERSION = '0.04' ; my $JAVA_PACKAGE = 'perl5' ; ####### # EXT # ####### my $dll = ".$Config{so}" ; my $o = $Config{_o}; my $LIBNAME = ($dll =~ /\.(?:so|o)$/) ? "lib$NAME" : $NAME ; ######### # FILES # ######### my $C_FILES = "$NAME.c ${NAME}_wrap.c" ; my $O_FILES = "$NAME$o ${NAME}_wrap$o" ; my $INTERFACE = "$NAME.i" ; my $CLEAN_FILES = "$LIBNAME$dll" ; my $CLEAN_SWIG_FILES = "$NAME.java ${NAME}_wrap.c ${NAME}JNI.java" ; my $JAVA_FILES = '' ; #opendir (DIRLOG, '.'); #while (my $filename = readdir DIRLOG) { $JAVA_FILES .= " $filename" if $filename =~ /\.java$/ ;} #closedir (DIRLOG); ############# # CHECK ENV # ############# { if ( -d $ENV{JAVA_HOME} ) { $ENV{JAVA_BIN} = $ENV{JAVA_HOME} . "/bin" if !defined $ENV{JAVA_BIN} ; $ENV{JAVA_INCLUDE} = $ENV{JAVA_HOME} . "/include" if !defined $ENV{JAVA_INCLUDE} ; } my $error ; foreach my $envs_i ( qw(JAVA_HOME JAVA_BIN JAVA_INCLUDE) ) { if ( !-d $ENV{$envs_i} ) { warn("Can't find $envs_i!\n") ; $error = 1 ;} } die "\n** Can't create Makefile, please set right the JAVA enverioment variables!\n" if $error ; } ######## # VARS # ######## my $debug = 0; my $pccflags = ccopts; my $pldflags = ldopts; my $ld = $Config{ld}; my $cc = $Config{cc}; my $javac = $ENV{JAVA_BIN} ? $ENV{JAVA_BIN} . "/javac" : "javac" ; my $javabin = $ENV{JAVA_BIN} ? $ENV{JAVA_BIN} . "/java" : "java" ; chomp($pldflags) ; if ( $^O =~ /(?:win32|dos)/i ) { $javac =~ s/\//\\/g ; $javabin =~ s/\//\\/g ; } my( $out, $ccdebug, $lddebug , $ldlnk , $warn, $rm, $mv ); my $is_MSVC = $cc =~ m/^cl/; if( $is_MSVC ) { $out = '-out:'; $ccdebug = $debug ? '-Zi ' : ''; $lddebug = $debug ? '-debug ' : '-release '; $warn = '-W3'; $ldlnk = '' ; } else { $out = '-o '; $ccdebug = $debug ? '-g ' : ''; $lddebug = $debug ? '' : '-s '; $warn = '-Wall -Wno-comments '; $ldlnk = ' -shared' ; } $rm = $^O eq 'MSWin32' ? '$(PERL) -MExtUtils::Command -e rm_f' : 'rm'; $mv = $^O eq 'MSWin32' ? '$(PERL) -MExtUtils::Command -e mv' : 'mv'; my $cflags = "$ccdebug$warn$pccflags"; my $ldflags = "$lddebug$pldflags$ldlnk"; my $includes = $ENV{JAVA_INCLUDE} ? qq`-I"$ENV{JAVA_INCLUDE}"` : '' ; for my $os ( qw(win32 linux) ) { my $dir = "$ENV{JAVA_INCLUDE}/$os" ; $includes .= qq` -I"$dir"` if -d $dir ; } ################## # CREATE LIB DIR # ################## ################# # WRITEMAKEFILE # ################# print "Writing Makefile for $NAME\n"; open OUT, "> Makefile" or die "open 'Makefile': $!"; print OUT < '' , \%{ maniread('MANIFEST-BUILT') } } ,'built');" .SUFFIXES: $o EOT ############## # RENAMETREE # ############## sub renametree { my $basedir = $_[0] || './basiclib' ; my $ext = exists $_[1] ? $_[1] : 'txt' ; $ext =~ s/\W//gs ; $ext = "-$ext" if $ext ; my @dir = catdir($basedir , 0,1,1) ; foreach my $dir_i ( @dir ) { my $new_file = $dir_i ; $new_file =~ s/\.(\w+)(?:-\w+)?$/.$1$ext/ ; rename($dir_i , $new_file) ; ##print "$dir_i >> $new_file\n" ; } } ########## # CATDIR # (DIR , CUT_BASE , RECURSIVE , ONLY_FILES) ########## sub catdir { my ( $dir , $cut , $r , $f ) = @_ ; my @files ; my @DIR = $dir ; foreach my $DIR ( @DIR ) { my $DH ; opendir ($DH, $DIR); while (my $filename = readdir $DH) { if ($filename ne "\." && $filename ne "\.\.") { my $file = "$DIR/$filename" ; if ($r && -d $file) { push(@DIR , $file) ;} else { if (!$f || !-d $file) { $file =~ s/^\Q$dir\E\/?//s if $cut ; push(@files , $file) ; } } } } closedir ($DH) ; } return( @files ) ; } ####### # END # #######