Previously, -m and -v were required in order to identify the module being worked on. Now, if neither -m nor -v are supplied, it is assumed that the current directory is a working copy of a DKMS source tree. A temporary source tree is created by taking a copy of the current directory, a temporary DKMS tree is created, the source tree added, and a DKMS package generated in the parent directory. For example, from a working copy of a DKMS source tree: dkms mkdeb --source-only Currently only the mkdeb and mkdsc commands are supported for use in this fashion, but a framework exists to add support for other commands in the future. --- dkms | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 51 insertions(+), 2 deletions(-) diff --git a/dkms b/dkms index ef4df63..17c9ef4 100755 --- a/dkms +++ b/dkms @@ -1966,6 +1966,46 @@ show_status () fi } +function create_temporary_trees () +{ + if [ -n "$module" ] || [ -n "$module_version" ]; then + return + fi + + [ -r dkms.conf ] || return + + . dkms.conf + module="$PACKAGE_NAME" + module_version="$PACKAGE_VERSION" + + source_tree=`mktemp -d` + dkms_tree=`mktemp -d` + + local source_tree_dir="$source_tree/$PACKAGE_NAME-$PACKAGE_VERSION" + mkdir -p "$source_tree_dir" + cp -a * "$source_tree_dir" # intentionally skip .git or .hg + add_module + temporary_trees_del_command="rm -rf $source_tree $dkms_tree" +} + +function delete_temporary_trees () +{ + $temporary_trees_del_command + if [ -n "$temporary_trees_del_command" ]; then + module= + module_version= + source_tree= + dkms_tree= + temporary_trees_del_command= + fi +} + +function in_temporary_trees () +{ + [ -n "$temporary_trees_del_command" ] + return $? +} + media_valid() { if [ "$media" == "floppy" ] || @@ -3001,6 +3041,9 @@ function make_debian() { create_type="$1" + create_temporary_trees + trap "delete_temporary_trees" EXIT HUP TERM + make_common_test "mk${create_type}" debian_package=$(echo $module | sed s/_/-/) @@ -3052,7 +3095,7 @@ function make_debian() echo $INSTALL_PACKAGES | sed 's/|/\ install\ /g' > $TEMPFILE $ROOT "sh -c '/usr/sbin/synaptic --set-selections --non-interactive --hide-main-window < $TEMPFILE'" - trap 'rm -f $TEMPFILE' EXIT HUP TERM + trap "rm -f $TEMPFILE; delete_temporary_trees" EXIT HUP TERM else $ROOT apt-get -y install $INSTALL_PACKAGES fi @@ -3106,7 +3149,7 @@ function make_debian() #prepare build directory and copy template local temp_dir=`mktemp -d $tmp_location/dkms.XXXXXX` - trap 'rm -rf $temp_dir' EXIT HUP TERM + trap "rm -rf $temp_dir; delete_temporary_trees" EXIT HUP TERM local temp_dir_debian="$temp_dir/$debian_package-dkms-$module_version" invoke_command "cp -ar '$DEBDIR/' '$temp_dir_debian'" "copying template" pushd "$temp_dir_debian" > /dev/null 2>&1 @@ -3145,8 +3188,14 @@ function make_debian() esac popd > /dev/null 2>&1 + if in_temporary_trees; then + echo "Copying built files to "`pwd`"/.." >&2 + cp "$dkms_tree/$module/$module_version/deb/"* .. + fi + #cleanup invoke_command "rm $temp_dir -fr" "Cleaning up temporary files" + delete_temporary_trees #done if [ "$?" -eq 0 ]; then -- 1.5.6.3