# !kmk_ash # $Id: gen-slickedit-workspace.sh 88326 2021-03-31 00:11:50Z vboxsync $ ## @file # Script for generating a SlickEdit workspace. # # # Copyright (C) 2009-2020 Oracle Corporation # # This file is part of VirtualBox Open Source Edition (OSE), as # available from http://www.virtualbox.org. This file is free software; # you can redistribute it and/or modify it under the terms of the GNU # General Public License (GPL) as published by the Free Software # Foundation, in version 2 as it comes in the "COPYING" file of the # VirtualBox OSE distribution. VirtualBox OSE is distributed in the # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. # # # Some constants. # MY_CAT="kmk_cat" MY_CP="kmk_cp" MY_MKDIR="kmk_mkdir" MY_MV="kmk_mv" MY_SED="kmk_sed" MY_RM="kmk_rm" MY_SLEEP="kmk_sleep" MY_EXPR="kmk_expr" MY_SVN="svn" #MY_SORT="kmk_cat" MY_SORT="sort" # # Globals. # MY_PROJECT_FILES="" MY_OUT_DIRS="\ out/${KBUILD_TARGET}.${KBUILD_TARGET_ARCH}/${KBUILD_TYPE} \ out/${KBUILD_TARGET}.${KBUILD_TARGET_ARCH}/debug \ out/${KBUILD_TARGET}.${KBUILD_TARGET_ARCH}/release \ out/linux.amd64/debug \ out/linux.x86/debug \ out/win.amd64/debug \ out/win.x86/debug \ out/darwin.amd64/debug \ out/darwin.x86/debug \ out/haiku.amd64/debug \ out/haiku.x86/debug \ out/solaris.amd64/debug \ out/solaris.x86/debug"; # # Parameters w/ defaults. # MY_ROOT_DIR=".." MY_OUT_DIR="SlickEdit" MY_PRJ_PRF="VBox-" MY_WS_NAME="VirtualBox.vpw" MY_DBG="" MY_WINDOWS_HOST="" MY_OPT_MINIMAL="" MY_OPT_USE_WILDCARDS="yes" ## # Gets the absolute path to an existing directory. # # @param $1 The path. my_abs_dir() { if test -n "${PWD}"; then MY_ABS_DIR=`cd ${MY_ROOT_DIR}/${1} && echo ${PWD}` else # old cygwin shell has no PWD and need adjusting. MY_ABS_DIR=`cd ${MY_ROOT_DIR}/${1} && pwd | ${MY_SED} -e 's,^/cygdrive/\(.\)/,\1:/,'` fi if test -z "${MY_ABS_DIR}"; then MY_ABS_DIR="${1}" fi } ## # Gets the file name part of a path. # # @param $1 The path. my_get_name() { SAVED_IFS=$IFS IFS=":/ " set $1 while test $# -gt 1 -a -n "${2}"; do shift; done IFS=$SAVED_IFS #echo "$1" export MY_GET_NAME=$1 } ## # Gets the newest version of a library (like openssl). # # @param $1 The library base path relative to root. my_get_newest_ver() { cd "${MY_ROOT_DIR}" > /dev/null latest= for ver in "$1"*; do if test -z "${latest}" || "${MY_EXPR}" "${ver}" ">" "${latest}" > /dev/null; then latest="${ver}" fi done if test -z "${latest}"; then echo "error: could not find any version of: $1" >&2; exit 1; fi echo "${latest}" return 0; } ## # Generate file entry for the specified file if it was found to be of interest. # # @param $1 The output file name base. # @param $2 The file name. # @param $3 Optional folder override. my_file() { # sort and filter by file type. case "$2" in # drop these. *.kup|*~|*.pyc|*.exe|*.sys|*.dll|*.o|*.obj|*.lib|*.a|*.ko) return 0 ;; # by prefix or directory component. tst*|*/testcase/*) MY_FOLDER="$1-Testcases.lst" ;; # by extension. *.c|*.cpp|*.m|*.mm|*.pl|*.py|*.as|*.c.h|*.cpp.h|*.java) MY_FOLDER="$1-Sources.lst" ;; *.h|*.hpp|*.mm) MY_FOLDER="$1-Headers.lst" ;; *.asm|*.s|*.S|*.inc|*.mac) MY_FOLDER="$1-Assembly.lst" ;; *) MY_FOLDER="$1-Others.lst" ;; esac if test -n "$3"; then MY_FOLDER="$1-$3.lst" fi ## @todo only files which are in subversion. # if ${MY_SVN} info "${2}" > /dev/null 2>&1; then my_get_name "${2}" echo ' ' >> "${MY_FOLDER}" # fi } ## # Generate file entry for the specified file if it was found to be of interest. # # @param $1 The output file name base. # @param $2 The wildcard spec. # @param $3 Optional folder override. my_wildcard() { if test -n "$3"; then MY_FOLDER="$1-$3.lst" else MY_FOLDER="$1-All.lst" fi EXCLUDES="*.log;*.kup;*~;*.bak;*.bak?;*.pyc;*.exe;*.sys;*.dll;*.o;*.obj;*.lib;*.a;*.ko;*.class;*.cvsignore;*.done;*.project;*.actionScriptProperties;*.scm-settings;*.svnpatch.rej;*.svn-base;.svn/*;*.gitignore;*.gitattributes;*.gitmodules;*.swagger-codegen-ignore;*.png;*.bmp;*.jpg" echo ' ' >> "${MY_FOLDER}" } ## # Generate file entries for the specified sub-directory tree. # # @param $1 The output filename. # @param $2 The sub-directory. # @param $3 Optional folder override. my_sub_tree() { if test -n "$MY_DBG"; then echo "dbg: my_sub_tree: ${2}"; fi # Skip .svn directories. case "$2" in */.svn|*/.svn) return 0 ;; esac # Process the files in the directory. for f in $2/*; do if test -d "${f}"; then my_sub_tree "${1}" "${f}" "${3}" else my_file "${1}" "${f}" "${3}" fi done return 0; } ## # Generate folders for the specified directories and files. # # @param $1 The output (base) file name. # @param $2+ The files and directories to traverse. my_generate_folder() { MY_FILE="$1" shift # Zap existing file collections. > "${MY_FILE}-All.lst" > "${MY_FILE}-Sources.lst" > "${MY_FILE}-Headers.lst" > "${MY_FILE}-Assembly.lst" > "${MY_FILE}-Testcases.lst" > "${MY_FILE}-Others.lst" # Traverse the directories and files. while test $# -ge 1 -a -n "${1}"; do for f in ${MY_ROOT_DIR}/$1; do if test -d "${f}"; then if test -z "${MY_OPT_USE_WILDCARDS}"; then my_sub_tree "${MY_FILE}" "${f}" else case "${f}" in ${MY_ROOT_DIR}/include*) #my_sub_tree "${MY_FILE}" "${f}" "Headers" my_wildcard "${MY_FILE}" "${f}" "Headers" ;; *) my_wildcard "${MY_FILE}" "${f}" ;; esac fi else my_file "${MY_FILE}" "${f}" fi done shift done # Generate the folders. if test -s "${MY_FILE}-All.lst"; then ${MY_SORT} "${MY_FILE}-All.lst" | ${MY_SED} -e 's/