--- /dev/null
+# Copyright (C) 2024 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+
+# This file exists to satisfy the standard layout of a Python program:
+# - a single .py file in the parent directory,
+# - any number of .py files in a subdirectory.
+# Explanation: https://stackoverflow.com/questions/16981921/relative-imports-in-python-3
+# Without this standard layout, we got
+# - errors at runtime:
+# from . import constants => ImportError: attempted relative import with no known parent package
+# from pygnulib import constants => ModuleNotFoundError: No module named 'pygnulib'
+# - error markers in Eclipse + PyDev.
+
+from pygnulib import main
+
+if __name__ == '__main__':
+ main.main_with_exception_handling()
+2024-04-01 Bruno Haible <bruno@clisp.org>
+
+ gnulib-tool.py: Use a standard Python program directory structure.
+ * pygnulib/main.py (main_with_exception_handling): New function for
+ existing code.
+ * .gnulib-tool.py: New file.
+ * pygnulib/constants.py: Update the computation of APP['root'].
+ * gnulib-tool.py: Don't set PYTHONPATH.
+
2024-04-01 Bruno Haible <bruno@clisp.org>
gnulib-tool.py: Simplify imports.
func_fatal_error "python3 not found; try setting GNULIB_TOOL_IMPL=sh"
fi
-# Setting the PYTHONPATH environment variable is needed to avoid an error:
-# from . import constants => ImportError: attempted relative import with no known parent package
-# from pygnulib import constants => ModuleNotFoundError: No module named 'pygnulib'
-# Explanation: https://stackoverflow.com/questions/16981921/relative-imports-in-python-3
-exec env PYTHONPATH="$gnulib_dir" python3 "$gnulib_dir/pygnulib/main.py" "$@"
+exec python3 "$gnulib_dir/.gnulib-tool.py" "$@"
ENCS['shell'] = 'UTF-8'
# Set APP dictionary
-APP['path'] = os.path.realpath(sys.argv[0]) # file name of <gnulib>/pygnulib/main.py
-APP['root'] = os.path.dirname(os.path.dirname(APP['path'])) # file name of <gnulib>
+APP['path'] = os.path.realpath(sys.argv[0]) # file name of <gnulib>/.gnulib-tool.py
+APP['root'] = os.path.dirname(APP['path']) # file name of <gnulib>
APP['name'] = os.path.join(APP['root'], 'gnulib-tool.py')
# Set DIRS directory