Compare commits
1 commit
80248dec88
...
9039dc7e40
| Author | SHA1 | Date | |
|---|---|---|---|
|
9039dc7e40 |
2 changed files with 41 additions and 10 deletions
|
|
@ -6,6 +6,10 @@ include $(JWBDIR)/make/dev-utils.mk
|
||||||
PY_INIT_TMPL = $(wildcard __init__.py.tmpl)
|
PY_INIT_TMPL = $(wildcard __init__.py.tmpl)
|
||||||
PY_SED_EXTRACT_EXPORT ?= /\(\(class\|def\)\s\+[a-zA-Z_].*\|^ *\S\+\s*=.*\)\# *export/ !d; /^\s*\#/ d; s/\(async\)* *\(class\|def\) *//; s/[(:=].*//
|
PY_SED_EXTRACT_EXPORT ?= /\(\(class\|def\)\s\+[a-zA-Z_].*\|^ *\S\+\s*=.*\)\# *export/ !d; /^\s*\#/ d; s/\(async\)* *\(class\|def\) *//; s/[(:=].*//
|
||||||
PY_INIT_FILTER ?= cat
|
PY_INIT_FILTER ?= cat
|
||||||
|
PY_GENERATE_INIT_PY ?= /bin/bash $(JWB_SCRIPT_DIR)/python-tools.sh create-init -m . -e "$(PY_SED_EXTRACT_EXPORT)"
|
||||||
|
ifneq ($(PY_SYMBOL_FILTER),)
|
||||||
|
PY_GENERATE_INIT_PY += --symbol-filter "$(PY_SYMBOL_FILTER)"
|
||||||
|
endif
|
||||||
|
|
||||||
#leftparen := (
|
#leftparen := (
|
||||||
#PY_EXPORT ?= $(shell sed '/\(class\|def\) ..*\# *export/ !d; s/\(class\|def\) *//; s/[$(leftparen):].*//' $(PY_SRC_PY))
|
#PY_EXPORT ?= $(shell sed '/\(class\|def\) ..*\# *export/ !d; s/\(class\|def\) *//; s/[$(leftparen):].*//' $(PY_SRC_PY))
|
||||||
|
|
@ -20,7 +24,7 @@ include $(JWBDIR)/make/py-rules.mk
|
||||||
ifeq ($(PY_UPDATE_INIT_PY),true)
|
ifeq ($(PY_UPDATE_INIT_PY),true)
|
||||||
__init__.py: $(PY_INIT_TMPL) $(filter-out __init__.py,$(PY_SRC_PY))
|
__init__.py: $(PY_INIT_TMPL) $(filter-out __init__.py,$(PY_SRC_PY))
|
||||||
if [ "$(PY_INIT_TMPL)" ]; then cat "$(PY_INIT_TMPL)" > $@.tmp; else > $@.tmp; fi
|
if [ "$(PY_INIT_TMPL)" ]; then cat "$(PY_INIT_TMPL)" > $@.tmp; else > $@.tmp; fi
|
||||||
set -e -o pipefail; /bin/bash $(JWB_SCRIPT_DIR)/python-tools.sh create-init -m . -e "$(PY_SED_EXTRACT_EXPORT)" \
|
set -e -o pipefail; $(PY_GENERATE_INIT_PY) \
|
||||||
$(filter-out __init__.py,$(PY_ALL_PY)) $(SUBDIRS_TO_ITERATE) | $(PY_INIT_FILTER) | tee -a $@.tmp
|
$(filter-out __init__.py,$(PY_ALL_PY)) $(SUBDIRS_TO_ITERATE) | $(PY_INIT_FILTER) | tee -a $@.tmp
|
||||||
mv $@.tmp $@
|
mv $@.tmp $@
|
||||||
endif
|
endif
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,12 @@ module_path()
|
||||||
|
|
||||||
cmd_create_init()
|
cmd_create_init()
|
||||||
{
|
{
|
||||||
|
__add_seen() {
|
||||||
|
local type="$1"
|
||||||
|
[[ -n "${seen[$type]+x}" ]] && fatal "Duplicate symbol: $type"
|
||||||
|
seen["$type"]=1
|
||||||
|
}
|
||||||
|
|
||||||
local import_submodules=0
|
local import_submodules=0
|
||||||
local files="$*"
|
local files="$*"
|
||||||
local del="-------------------------- generated by $myname"
|
local del="-------------------------- generated by $myname"
|
||||||
|
|
@ -42,26 +48,43 @@ cmd_create_init()
|
||||||
echo "from pkgutil import extend_path"
|
echo "from pkgutil import extend_path"
|
||||||
echo ""
|
echo ""
|
||||||
echo "__path__ = extend_path(__path__, __name__)"
|
echo "__path__ = extend_path(__path__, __name__)"
|
||||||
|
echo
|
||||||
local f
|
local f
|
||||||
local -A seen=()
|
local -A seen=()
|
||||||
|
local dst_type
|
||||||
for f in $files; do
|
for f in $files; do
|
||||||
test -d $f && continue
|
test -d $f && continue
|
||||||
local base=${f##*/}
|
local base=${f##*/}
|
||||||
base=${base%.py}
|
base=${base%.py}
|
||||||
if [ "$sed_extract_command" ]; then
|
if [ "$sed_extract_cmd" ]; then
|
||||||
local type types=`sed "$sed_extract_command" $f`
|
local src_type types=$(sed "$sed_extract_cmd" $f)
|
||||||
for type in $types; do
|
for src_type in $types; do
|
||||||
echo "from `module_path $base` import $type as $type"
|
if [ -z "$sed_symbol_filter_cmd" ]; then
|
||||||
[[ -n "${seen[$type]+x}" ]] && fatal "Duplicate symbol: $type"
|
dst_type="$src_type"
|
||||||
seen["$type"]=1
|
else
|
||||||
|
dst_type=$(echo $base $src_type | sed "$sed_symbol_filter_cmd")
|
||||||
|
fi
|
||||||
|
[ "$sed_symbol_filter_cmd" ] && dst_type=$(echo $base $src_type | sed "$sed_symbol_filter_cmd")
|
||||||
|
echo "from `module_path $base` import $src_type as $dst_type"
|
||||||
|
__add_seen $dst_type
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
if [ "$import_submodules" = 1 ]; then
|
if [ "$import_submodules" = 1 ]; then
|
||||||
for f in $files; do
|
for f in $files; do
|
||||||
[ -f $f/__init__.py ] && echo "import `module_path $f` as $f"
|
[ -f $f/__init__.py ] || continue
|
||||||
|
echo "import `module_path $f` as $f"
|
||||||
|
__add_seen $f
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "__all__ = ["
|
||||||
|
for dst_type in ${!seen[@]}; do
|
||||||
|
echo " \"$dst_type\","
|
||||||
|
done
|
||||||
|
echo "]"
|
||||||
|
|
||||||
echo "# << $del <<"
|
echo "# << $del <<"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -69,11 +92,15 @@ cmd_create_init()
|
||||||
|
|
||||||
myname=`basename $0`
|
myname=`basename $0`
|
||||||
|
|
||||||
eval set -- `getopt -o 'he:m:' "$@"`
|
eval set -- `getopt -l 'symbol-filter:' -o 'he:m:' "$@"`
|
||||||
while [ "$1" != -- ]; do
|
while [ "$1" != -- ]; do
|
||||||
case $1 in
|
case $1 in
|
||||||
-e)
|
-e)
|
||||||
sed_extract_command="$2"
|
sed_extract_cmd="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--symbol-filter)
|
||||||
|
sed_symbol_filter_cmd="$2"
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
-m)
|
-m)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue