623 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			623 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
#!/bin/sh
 | 
						|
 | 
						|
#
 | 
						|
# A script that symlinks source files from Mesa to modular
 | 
						|
#
 | 
						|
# Author: Soren Sandmann (sandmann@redhat.com) (original)
 | 
						|
# adapted for Mesa by Adam Jackson (ajax@nwnk.net)
 | 
						|
 | 
						|
#
 | 
						|
# Things we would like to do
 | 
						|
#
 | 
						|
#	- Check that all the relevant files exist
 | 
						|
#		- AUTHORS, autogen.sh, configure.ac, ...
 | 
						|
#	- Check that we have actually linked everything
 | 
						|
#		- if a file doesn't need to be linked, then it needs
 | 
						|
#		  to be listed as "not-linked"
 | 
						|
#	- Compute diffs between all the files (shouldn't be necessary)
 | 
						|
#	- possibly check that files are listet in Makefile.am's
 | 
						|
#	- Clean target directory of irrelevant files
 | 
						|
#
 | 
						|
 | 
						|
check_destinations () {
 | 
						|
    # don't do anything - we are relying on the side
 | 
						|
    # effect of dst_dir
 | 
						|
    true
 | 
						|
}
 | 
						|
 | 
						|
check_exist() {
 | 
						|
    # Check whether $1 exists
 | 
						|
 | 
						|
    if [ ! -e $1 ] ; then
 | 
						|
	error "$1 not found"
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
delete_existing() {
 | 
						|
    # Delete $2
 | 
						|
 | 
						|
    rm -f $2
 | 
						|
}
 | 
						|
 | 
						|
link_files() {
 | 
						|
    # Link $1 to $2
 | 
						|
 | 
						|
    if [ ! -e $2 ] ; then
 | 
						|
	ln -s $1 $2
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
main() {
 | 
						|
    check_args $1 $2
 | 
						|
 | 
						|
    run check_destinations "Creating destination directories"
 | 
						|
    run check_exist "Checking that the source files exist"
 | 
						|
    run delete_existing "Deleting existing files"
 | 
						|
    run link_files "Linking files"
 | 
						|
}
 | 
						|
 | 
						|
## actual symlinking
 | 
						|
 | 
						|
symlink_mesa_glapi() {
 | 
						|
    src_dir src/mesa/glapi
 | 
						|
    dst_dir mesa/glapi
 | 
						|
 | 
						|
    action dispatch.h
 | 
						|
    action glapi.c
 | 
						|
    action glapi.h
 | 
						|
    action glapioffsets.h
 | 
						|
    action glapitable.h
 | 
						|
    action glapitemp.h
 | 
						|
    action glprocs.h
 | 
						|
    action glthread.c
 | 
						|
    action glthread.h
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_main() {
 | 
						|
    src_dir src/mesa/main
 | 
						|
    dst_dir mesa/main
 | 
						|
 | 
						|
    action accum.c
 | 
						|
    action accum.h
 | 
						|
    action api_arrayelt.c
 | 
						|
    action api_arrayelt.h
 | 
						|
    action api_eval.h
 | 
						|
    action api_loopback.c
 | 
						|
    action api_loopback.h
 | 
						|
    action api_noop.c
 | 
						|
    action api_noop.h
 | 
						|
    action api_validate.c
 | 
						|
    action api_validate.h
 | 
						|
    action attrib.c
 | 
						|
    action attrib.h
 | 
						|
    action blend.c
 | 
						|
    action blend.h
 | 
						|
    action bufferobj.c
 | 
						|
    action bufferobj.h
 | 
						|
    action buffers.c
 | 
						|
    action buffers.h
 | 
						|
    action clip.c
 | 
						|
    action clip.h
 | 
						|
    action colormac.h
 | 
						|
    action colortab.c
 | 
						|
    action colortab.h
 | 
						|
    action config.h
 | 
						|
    action context.c
 | 
						|
    action context.h
 | 
						|
    action convolve.c
 | 
						|
    action convolve.h
 | 
						|
    action dd.h
 | 
						|
    action debug.c
 | 
						|
    action debug.h
 | 
						|
    action depth.c
 | 
						|
    action depth.h
 | 
						|
    action dispatch.c
 | 
						|
    action dlist.c
 | 
						|
    action dlist.h
 | 
						|
    action drawpix.c
 | 
						|
    action drawpix.h
 | 
						|
    action enable.c
 | 
						|
    action enable.h
 | 
						|
    action enums.c
 | 
						|
    action enums.h
 | 
						|
    action eval.c
 | 
						|
    action eval.h
 | 
						|
    action extensions.c
 | 
						|
    action extensions.h
 | 
						|
    action fbobject.c
 | 
						|
    action fbobject.h
 | 
						|
    action feedback.c
 | 
						|
    action feedback.h
 | 
						|
    action fog.c
 | 
						|
    action fog.h
 | 
						|
    action framebuffer.c
 | 
						|
    action framebuffer.h
 | 
						|
    action get.c
 | 
						|
    action get.h
 | 
						|
    action getstring.c
 | 
						|
    action glheader.h
 | 
						|
    action hash.c
 | 
						|
    action hash.h
 | 
						|
    action hint.c
 | 
						|
    action hint.h
 | 
						|
    action histogram.c
 | 
						|
    action histogram.h
 | 
						|
    action image.c
 | 
						|
    action image.h
 | 
						|
    action imports.c
 | 
						|
    action imports.h
 | 
						|
    action light.c
 | 
						|
    action light.h
 | 
						|
    action lines.c
 | 
						|
    action lines.h
 | 
						|
    action macros.h
 | 
						|
    action matrix.c
 | 
						|
    action matrix.h
 | 
						|
    action mtypes.h
 | 
						|
    action occlude.c
 | 
						|
    action occlude.h
 | 
						|
    action pixel.c
 | 
						|
    action pixel.h
 | 
						|
    action points.c
 | 
						|
    action points.h
 | 
						|
    action polygon.c
 | 
						|
    action polygon.h
 | 
						|
    action rastpos.c
 | 
						|
    action rastpos.h
 | 
						|
    action renderbuffer.c
 | 
						|
    action renderbuffer.h
 | 
						|
    action simple_list.h
 | 
						|
    action state.c
 | 
						|
    action state.h
 | 
						|
    action stencil.c
 | 
						|
    action stencil.h
 | 
						|
    action texcompress.c
 | 
						|
    action texcompress.h
 | 
						|
    action texcompress_fxt1.c
 | 
						|
    action texcompress_s3tc.c
 | 
						|
    action texenvprogram.c
 | 
						|
    action texenvprogram.h
 | 
						|
    action texformat.c
 | 
						|
    action texformat.h
 | 
						|
    action texformat_tmp.h
 | 
						|
    action teximage.c
 | 
						|
    action teximage.h
 | 
						|
    action texobj.c
 | 
						|
    action texobj.h
 | 
						|
    action texrender.c
 | 
						|
    action texrender.h
 | 
						|
    action texstate.c
 | 
						|
    action texstate.h
 | 
						|
    action texstore.c
 | 
						|
    action texstore.h
 | 
						|
    action varray.c
 | 
						|
    action varray.h
 | 
						|
    action version.h
 | 
						|
    action vsnprintf.c
 | 
						|
    action vtxfmt.c
 | 
						|
    action vtxfmt.h
 | 
						|
    action vtxfmt_tmp.h
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_math() {
 | 
						|
    src_dir src/mesa/math
 | 
						|
    dst_dir mesa/math
 | 
						|
 | 
						|
    action m_clip_tmp.h
 | 
						|
    action m_copy_tmp.h
 | 
						|
    action m_debug.h
 | 
						|
    action m_debug_clip.c
 | 
						|
    action m_debug_norm.c
 | 
						|
    action m_debug_util.h
 | 
						|
    action m_debug_xform.c
 | 
						|
    action m_dotprod_tmp.h
 | 
						|
    action m_eval.c
 | 
						|
    action m_eval.h
 | 
						|
    action m_matrix.c
 | 
						|
    action m_matrix.h
 | 
						|
    action m_norm_tmp.h
 | 
						|
    action m_trans_tmp.h
 | 
						|
    action m_translate.c
 | 
						|
    action m_translate.h
 | 
						|
    action m_vector.c
 | 
						|
    action m_vector.h
 | 
						|
    action m_xform.c
 | 
						|
    action m_xform.h
 | 
						|
    action m_xform_tmp.h
 | 
						|
    action mathmod.h
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_ac() {
 | 
						|
    src_dir src/mesa/array_cache
 | 
						|
    dst_dir mesa/array_cache
 | 
						|
 | 
						|
    action ac_context.c
 | 
						|
    action ac_context.h
 | 
						|
    action ac_import.c
 | 
						|
    action acache.h
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_swrast() {
 | 
						|
    src_dir src/mesa/swrast
 | 
						|
    dst_dir mesa/swrast
 | 
						|
 | 
						|
    action s_aaline.c
 | 
						|
    action s_aaline.h
 | 
						|
    action s_aalinetemp.h
 | 
						|
    action s_aatriangle.c
 | 
						|
    action s_aatriangle.h
 | 
						|
    action s_aatritemp.h
 | 
						|
    action s_accum.c
 | 
						|
    action s_accum.h
 | 
						|
    action s_alpha.c
 | 
						|
    action s_alpha.h
 | 
						|
    action s_atifragshader.c
 | 
						|
    action s_atifragshader.h
 | 
						|
    action s_bitmap.c
 | 
						|
    action s_blend.c
 | 
						|
    action s_blend.h
 | 
						|
    action s_buffers.c
 | 
						|
    action s_context.c
 | 
						|
    action s_context.h
 | 
						|
    action s_copypix.c
 | 
						|
    action s_depth.c
 | 
						|
    action s_depth.h
 | 
						|
    action s_drawpix.c
 | 
						|
    action s_drawpix.h
 | 
						|
    action s_feedback.c
 | 
						|
    action s_feedback.h
 | 
						|
    action s_fog.c
 | 
						|
    action s_fog.h
 | 
						|
    action s_fragprog_to_c.c
 | 
						|
    action s_imaging.c
 | 
						|
    action s_lines.c
 | 
						|
    action s_lines.h
 | 
						|
    action s_linetemp.h
 | 
						|
    action s_logic.c
 | 
						|
    action s_logic.h
 | 
						|
    action s_masking.c
 | 
						|
    action s_masking.h
 | 
						|
    action s_nvfragprog.c
 | 
						|
    action s_nvfragprog.h
 | 
						|
    action s_pixeltex.c
 | 
						|
    action s_pixeltex.h
 | 
						|
    action s_points.c
 | 
						|
    action s_points.h
 | 
						|
    action s_pointtemp.h
 | 
						|
    action s_readpix.c
 | 
						|
    action s_span.c
 | 
						|
    action s_span.h
 | 
						|
    action s_spantemp.h
 | 
						|
    action s_stencil.c
 | 
						|
    action s_stencil.h
 | 
						|
    action s_tcc.c
 | 
						|
    action s_texstore.c
 | 
						|
    action s_texture.c
 | 
						|
    action s_texture.h
 | 
						|
    action s_triangle.c
 | 
						|
    action s_triangle.h
 | 
						|
    action s_trispan.h
 | 
						|
    action s_tritemp.h
 | 
						|
    action s_zoom.c
 | 
						|
    action s_zoom.h
 | 
						|
    action swrast.h
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_ss() {
 | 
						|
    src_dir src/mesa/swrast_setup
 | 
						|
    dst_dir mesa/swrast_setup
 | 
						|
 | 
						|
    action ss_context.c
 | 
						|
    action ss_context.h
 | 
						|
    action ss_triangle.c
 | 
						|
    action ss_triangle.h
 | 
						|
    action ss_tritmp.h
 | 
						|
    action ss_vb.h
 | 
						|
    action swrast_setup.h
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_tnl() {
 | 
						|
    src_dir src/mesa/tnl
 | 
						|
    dst_dir mesa/tnl
 | 
						|
 | 
						|
    action t_array_api.c
 | 
						|
    action t_array_api.h
 | 
						|
    action t_array_import.c
 | 
						|
    action t_array_import.h
 | 
						|
    action t_context.c
 | 
						|
    action t_context.h
 | 
						|
    action t_pipeline.c
 | 
						|
    action t_pipeline.h
 | 
						|
    action t_save_api.c
 | 
						|
    action t_save_api.h
 | 
						|
    action t_save_loopback.c
 | 
						|
    action t_save_playback.c
 | 
						|
    action t_vb_arbprogram.c
 | 
						|
    action t_vb_arbprogram.h
 | 
						|
    action t_vb_arbprogram_sse.c
 | 
						|
    action t_vb_cliptmp.h
 | 
						|
    action t_vb_cull.c
 | 
						|
    action t_vb_fog.c
 | 
						|
    action t_vb_light.c
 | 
						|
    action t_vb_lighttmp.h
 | 
						|
    action t_vb_normals.c
 | 
						|
    action t_vb_points.c
 | 
						|
    action t_vb_program.c
 | 
						|
    action t_vb_render.c
 | 
						|
    action t_vb_rendertmp.h
 | 
						|
    action t_vb_texgen.c
 | 
						|
    action t_vb_texmat.c
 | 
						|
    action t_vb_vertex.c
 | 
						|
    action t_vertex.c
 | 
						|
    action t_vertex.h
 | 
						|
    action t_vertex_generic.c
 | 
						|
    action t_vertex_sse.c
 | 
						|
    action t_vp_build.c
 | 
						|
    action t_vp_build.h
 | 
						|
    action t_vtx_api.c
 | 
						|
    action t_vtx_api.h
 | 
						|
    action t_vtx_eval.c
 | 
						|
    action t_vtx_exec.c
 | 
						|
    action t_vtx_generic.c
 | 
						|
    action t_vtx_x86.c
 | 
						|
    action tnl.h
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_shader() {
 | 
						|
    src_dir src/mesa/shader
 | 
						|
    dst_dir mesa/shader
 | 
						|
 | 
						|
    action arbfragparse.c
 | 
						|
    action arbfragparse.h
 | 
						|
    action arbprogparse.c
 | 
						|
    action arbprogparse.h
 | 
						|
    action arbprogram.c
 | 
						|
    action arbprogram.h
 | 
						|
    action arbprogram_syn.h
 | 
						|
    action arbvertparse.c
 | 
						|
    action arbvertparse.h
 | 
						|
    action atifragshader.c
 | 
						|
    action atifragshader.h
 | 
						|
    action nvfragparse.c
 | 
						|
    action nvfragparse.h
 | 
						|
    action nvfragprog.h
 | 
						|
    action nvprogram.c
 | 
						|
    action nvprogram.h
 | 
						|
    action nvvertexec.c
 | 
						|
    action nvvertexec.h
 | 
						|
    action nvvertparse.c
 | 
						|
    action nvvertparse.h
 | 
						|
    action nvvertprog.h
 | 
						|
    action program.c
 | 
						|
    action program.h
 | 
						|
    action shaderobjects.c
 | 
						|
    action shaderobjects.h
 | 
						|
    action shaderobjects_3dlabs.c
 | 
						|
    action shaderobjects_3dlabs.h
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_shader_grammar() {
 | 
						|
    src_dir src/mesa/shader/grammar
 | 
						|
    dst_dir mesa/shader/grammar
 | 
						|
 | 
						|
    action grammar.c
 | 
						|
    action grammar.h
 | 
						|
    action grammar_syn.h
 | 
						|
    action grammar_mesa.c
 | 
						|
    action grammar_mesa.h
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_shader_slang() {
 | 
						|
    src_dir src/mesa/shader/slang
 | 
						|
    dst_dir mesa/shader/slang
 | 
						|
 | 
						|
    action slang_assemble_assignment.c
 | 
						|
    action slang_assemble_assignment.h
 | 
						|
    action slang_assemble.c
 | 
						|
    action slang_assemble_conditional.c
 | 
						|
    action slang_assemble_conditional.h
 | 
						|
    action slang_assemble_constructor.c
 | 
						|
    action slang_assemble_constructor.h
 | 
						|
    action slang_assemble.h
 | 
						|
    action slang_assemble_typeinfo.c
 | 
						|
    action slang_assemble_typeinfo.h
 | 
						|
    action slang_compile.c
 | 
						|
    action slang_compile.h
 | 
						|
    action slang_execute.c
 | 
						|
    action slang_execute.h
 | 
						|
    action slang_mesa.h
 | 
						|
    action slang_preprocess.c
 | 
						|
    action slang_preprocess.h
 | 
						|
    action slang_storage.c
 | 
						|
    action slang_storage.h
 | 
						|
    action slang_utility.c
 | 
						|
    action slang_utility.h
 | 
						|
    action traverse_wrap.h
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_shader_slang_library() {
 | 
						|
    src_dir src/mesa/shader/slang/library
 | 
						|
    dst_dir mesa/shader/slang/library
 | 
						|
 | 
						|
    action slang_common_builtin_gc_bin.h
 | 
						|
    action slang_common_builtin_gc.h
 | 
						|
    action slang_core_gc_bin.h
 | 
						|
    action slang_core_gc.h
 | 
						|
    action slang_fragment_builtin_gc_bin.h
 | 
						|
    action slang_fragment_builtin_gc.h
 | 
						|
    action slang_shader_syn.h
 | 
						|
    action slang_version_syn.h
 | 
						|
    action slang_vertex_builtin_gc_bin.h
 | 
						|
    action slang_vertex_builtin_gc.h
 | 
						|
}        
 | 
						|
 | 
						|
symlink_mesa_x() {
 | 
						|
    src_dir src/mesa/drivers/x11
 | 
						|
    dst_dir mesa/X
 | 
						|
 | 
						|
    # action glxapi.h
 | 
						|
    action glxheader.h
 | 
						|
    # action realglx.h
 | 
						|
    # action xfonts.h
 | 
						|
    action xm_api.c
 | 
						|
    action xm_buffer.c
 | 
						|
    action xm_dd.c
 | 
						|
    action xm_line.c
 | 
						|
    action xm_span.c
 | 
						|
    action xm_tri.c
 | 
						|
    action xmesaP.h
 | 
						|
 | 
						|
    # another hack
 | 
						|
    src_dir src/mesa/drivers/common
 | 
						|
    dst_dir mesa/X/drivers/common
 | 
						|
    action driverfuncs.c
 | 
						|
    action driverfuncs.h
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_ppc() {
 | 
						|
    src_dir src/mesa/ppc
 | 
						|
    dst_dir mesa/ppc
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_sparc() {
 | 
						|
    src_dir src/mesa/sparc
 | 
						|
    dst_dir mesa/sparc
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_x86() {
 | 
						|
    src_dir src/mesa/x86
 | 
						|
    dst_dir mesa/x86
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_x8664() {
 | 
						|
    src_dir src/mesa/x86-64
 | 
						|
    dst_dir mesa/x86-64
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa() {
 | 
						|
    symlink_mesa_main
 | 
						|
    symlink_mesa_math
 | 
						|
    symlink_mesa_ac
 | 
						|
    symlink_mesa_swrast
 | 
						|
    symlink_mesa_ss
 | 
						|
    symlink_mesa_tnl
 | 
						|
    symlink_mesa_shader
 | 
						|
    symlink_mesa_shader_grammar
 | 
						|
    symlink_mesa_shader_slang
 | 
						|
    symlink_mesa_shader_slang_library
 | 
						|
    symlink_mesa_x
 | 
						|
    symlink_mesa_glapi
 | 
						|
    symlink_mesa_ppc
 | 
						|
    symlink_mesa_sparc
 | 
						|
    symlink_mesa_x86
 | 
						|
    symlink_mesa_x8664
 | 
						|
}
 | 
						|
 | 
						|
symlink_glx() {
 | 
						|
    # this is... unpleasant
 | 
						|
    src_dir src/glx/x11
 | 
						|
    dst_dir glx
 | 
						|
 | 
						|
    action indirect_size.c
 | 
						|
    action indirect_size.h
 | 
						|
}
 | 
						|
 | 
						|
#########
 | 
						|
#
 | 
						|
#    Helper functions
 | 
						|
#
 | 
						|
#########
 | 
						|
 | 
						|
error() {
 | 
						|
	echo
 | 
						|
	echo \ \ \ error:\ \ \ $1
 | 
						|
	exit
 | 
						|
}
 | 
						|
 | 
						|
# printing out what's going on
 | 
						|
run_module() {
 | 
						|
    # $1 module
 | 
						|
    # $2 explanation
 | 
						|
    echo -n $EXPLANATION for $1 module ...\ 
 | 
						|
    symlink_$1
 | 
						|
    echo DONE
 | 
						|
}
 | 
						|
 | 
						|
run() {
 | 
						|
    # $1 what to do
 | 
						|
    # $2 explanation
 | 
						|
 | 
						|
    ACTION=$1 EXPLANATION=$2 run_module mesa
 | 
						|
    ACTION=$1 EXPLANATION=$2 run_module glx
 | 
						|
}
 | 
						|
 | 
						|
src_dir() {
 | 
						|
    REAL_SRC_DIR=$SRC_DIR/$1
 | 
						|
    if [ ! -d $REAL_SRC_DIR ] ; then
 | 
						|
	error "Source directory $REAL_SRC_DIR does not exist"
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
dst_dir() {
 | 
						|
    REAL_DST_DIR=$DST_DIR/$1
 | 
						|
    if [ ! -d $REAL_DST_DIR ] ; then
 | 
						|
	mkdir -p $REAL_DST_DIR
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
action() {
 | 
						|
    if [ -z $2 ] ; then
 | 
						|
	$ACTION	$REAL_SRC_DIR/$1	$REAL_DST_DIR/$1
 | 
						|
    else
 | 
						|
	$ACTION	$REAL_SRC_DIR/$1	$REAL_DST_DIR/$2
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
usage() {
 | 
						|
    echo symlink.sh src-dir dst-dir
 | 
						|
    echo src-dir: the xc directory of the monolithic source tree
 | 
						|
    echo dst-dir: the modular source tree containing proto, app, lib, ...
 | 
						|
}
 | 
						|
 | 
						|
# Check commandline args
 | 
						|
check_args() {
 | 
						|
    if [ -z $1 ] ; then
 | 
						|
	echo Missing source dir
 | 
						|
	usage
 | 
						|
	exit 1
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ -z $2 ] ; then
 | 
						|
	echo Missing destination dir
 | 
						|
	usage
 | 
						|
	exit 1
 | 
						|
    fi
 | 
						|
     
 | 
						|
    if [ ! -d $1 ] ; then
 | 
						|
	echo $1 is not a dir
 | 
						|
	usage
 | 
						|
	exit 1
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ ! -d $2 ] ; then
 | 
						|
	echo $2 is not a dir
 | 
						|
	usage
 | 
						|
	exit 1
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ $1 = $2 ] ; then
 | 
						|
	echo source and destination can\'t be the same
 | 
						|
	usage
 | 
						|
	exit 1
 | 
						|
    fi
 | 
						|
 | 
						|
    D=`dirname "$relpath"`
 | 
						|
    B=`basename "$relpath"`
 | 
						|
    abspath="`cd \"$D\" 2>/dev/null && pwd || echo \"$D\"`/$B"
 | 
						|
 | 
						|
    SRC_DIR=`( cd $1 ; pwd )`
 | 
						|
    DST_DIR=`(cd $2 ; pwd )`
 | 
						|
}
 | 
						|
 | 
						|
main $1 $2
 |