337 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			337 lines
		
	
	
		
			6.1 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
 | 
						|
 | 
						|
    for src in $REAL_SRC_DIR/*.c $REAL_SRC_DIR/*.h; do
 | 
						|
        action `basename $src`
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_main() {
 | 
						|
    src_dir src/mesa/main
 | 
						|
    dst_dir mesa/main
 | 
						|
 | 
						|
    for src in $REAL_SRC_DIR/*.c $REAL_SRC_DIR/*.h; do
 | 
						|
        action `basename $src`
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_math() {
 | 
						|
    src_dir src/mesa/math
 | 
						|
    dst_dir mesa/math
 | 
						|
 | 
						|
    for src in $REAL_SRC_DIR/*.c $REAL_SRC_DIR/*.h; do
 | 
						|
        action `basename $src`
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_swrast() {
 | 
						|
    src_dir src/mesa/swrast
 | 
						|
    dst_dir mesa/swrast
 | 
						|
 | 
						|
    for src in $REAL_SRC_DIR/*.c $REAL_SRC_DIR/*.h; do
 | 
						|
        action `basename $src`
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_ss() {
 | 
						|
    src_dir src/mesa/swrast_setup
 | 
						|
    dst_dir mesa/swrast_setup
 | 
						|
 | 
						|
    for src in $REAL_SRC_DIR/*.c $REAL_SRC_DIR/*.h; do
 | 
						|
        action `basename $src`
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_tnl() {
 | 
						|
    src_dir src/mesa/tnl
 | 
						|
    dst_dir mesa/tnl
 | 
						|
 | 
						|
    for src in $REAL_SRC_DIR/*.c $REAL_SRC_DIR/*.h; do
 | 
						|
        action `basename $src`
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_shader() {
 | 
						|
    src_dir src/mesa/shader
 | 
						|
    dst_dir mesa/shader
 | 
						|
 | 
						|
    for src in $REAL_SRC_DIR/*.c $REAL_SRC_DIR/*.h; do
 | 
						|
        action `basename $src`
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_shader_grammar() {
 | 
						|
    src_dir src/mesa/shader/grammar
 | 
						|
    dst_dir mesa/shader/grammar
 | 
						|
 | 
						|
    for src in $REAL_SRC_DIR/*.c $REAL_SRC_DIR/*.h; do
 | 
						|
        action `basename $src`
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_shader_slang() {
 | 
						|
    src_dir src/mesa/shader/slang
 | 
						|
    dst_dir mesa/shader/slang
 | 
						|
 | 
						|
    for src in $REAL_SRC_DIR/*.c $REAL_SRC_DIR/*.h; do
 | 
						|
        action `basename $src`
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
symlink_mesa_shader_slang_library() {
 | 
						|
    src_dir src/mesa/shader/slang/library
 | 
						|
    dst_dir mesa/shader/slang/library
 | 
						|
 | 
						|
    for src in $REAL_SRC_DIR/*.c $REAL_SRC_DIR/*.h; do
 | 
						|
        action `basename $src`
 | 
						|
    done
 | 
						|
}        
 | 
						|
 | 
						|
symlink_mesa_vbo() {
 | 
						|
    src_dir src/mesa/vbo
 | 
						|
    dst_dir mesa/vbo
 | 
						|
 | 
						|
    for src in $REAL_SRC_DIR/*.c $REAL_SRC_DIR/*.h; do
 | 
						|
        action `basename $src`
 | 
						|
    done
 | 
						|
}
 | 
						|
 | 
						|
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_image.c
 | 
						|
    action xm_image.h
 | 
						|
    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_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_vbo
 | 
						|
    symlink_mesa_x86
 | 
						|
    symlink_mesa_x8664
 | 
						|
}
 | 
						|
 | 
						|
symlink_glx() {
 | 
						|
    # this is... unpleasant
 | 
						|
    src_dir src/glx/x11
 | 
						|
    dst_dir glx
 | 
						|
 | 
						|
    action indirect_size.h
 | 
						|
    action glcontextmodes.c
 | 
						|
    action glcontextmodes.h
 | 
						|
 | 
						|
    src_dir src/mesa/glapi
 | 
						|
 | 
						|
    action glapi.c
 | 
						|
    action glthread.c
 | 
						|
}
 | 
						|
 | 
						|
#########
 | 
						|
#
 | 
						|
#    Helper functions
 | 
						|
#
 | 
						|
#########
 | 
						|
 | 
						|
error() {
 | 
						|
	echo
 | 
						|
	echo \ \ \ error:\ \ \ $1
 | 
						|
	exit 1
 | 
						|
}
 | 
						|
 | 
						|
# 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-mesa.sh src-dir dst-dir
 | 
						|
    echo src-dir: the Mesa source directory
 | 
						|
    echo dst-dir: the GL subdirectory of the Xserver modular tree
 | 
						|
}
 | 
						|
 | 
						|
# 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
 |