Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

projCtx_t: Copy ini file settings, proj4_init_rules, etc.. when initializing context from global #2331

Merged
merged 5 commits into from
Aug 20, 2020
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/ctx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -173,12 +173,22 @@ projCtx_t::projCtx_t(const projCtx_t& other)
logger = other.logger;
logger_app_data = other.logger_app_data;
fileapi_legacy = other.fileapi_legacy;
use_proj4_init_rules = other.use_proj4_init_rules;
epsg_file_exists = other.epsg_file_exists;
env_var_proj_lib = other.env_var_proj_lib;
snowman2 marked this conversation as resolved.
Show resolved Hide resolved
set_search_paths(other.search_paths);
user_writable_directory = other.user_writable_directory;
file_finder = other.file_finder;
file_finder_legacy = other.file_finder_legacy;
file_finder_user_data = other.file_finder_user_data;
custom_sqlite3_vfs_name = other.custom_sqlite3_vfs_name;
// BEGIN ini file settings
iniFileLoaded = other.iniFileLoaded;
gridChunkCache = other.gridChunkCache;
endpoint = other.endpoint;
networking = other.networking;
defaultTmercAlgo = other.defaultTmercAlgo;
// END ini file settings
ca_bundle_path = other.ca_bundle_path;
if (other.cpp_context != nullptr) {
cpp_context = other.cpp_context->clone(this);
Expand Down
45 changes: 45 additions & 0 deletions test/unit/test_c_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4797,6 +4797,51 @@ TEST_F(CApi, proj_context_set_sqlite3_vfs_name) {

// ---------------------------------------------------------------------------

TEST_F(CApi, proj_context_set_sqlite3_vfs_name__from_global_context) {

// Set a dummy VFS and check it is taken into account
// (failure to open proj.db)
proj_context_set_sqlite3_vfs_name(nullptr, "dummy_vfs_name");

PJ_CONTEXT *ctx = proj_context_create();
proj_log_func(ctx, nullptr, [](void *, int, const char *) -> void {});

ASSERT_EQ(proj_create(ctx, "EPSG:4326"), nullptr);

// Restore default VFS
proj_context_set_sqlite3_vfs_name(nullptr, nullptr);
proj_context_destroy(ctx);
}

// ---------------------------------------------------------------------------

TEST_F(CApi, use_proj4_init_rules) {
PJ_CONTEXT *ctx = proj_context_create();
proj_context_use_proj4_init_rules(ctx, true);
ASSERT_TRUE(proj_context_get_use_proj4_init_rules(ctx, true));
proj_context_use_proj4_init_rules(ctx, false);
ASSERT_TRUE(!proj_context_get_use_proj4_init_rules(ctx, true));
proj_context_destroy(ctx);
}

// ---------------------------------------------------------------------------

TEST_F(CApi, use_proj4_init_rules__from_global_context) {
snowman2 marked this conversation as resolved.
Show resolved Hide resolved

int initial_rules = proj_context_get_use_proj4_init_rules(nullptr, true);
proj_context_use_proj4_init_rules(nullptr, true);
PJ_CONTEXT *ctx = proj_context_create();
ASSERT_TRUE(proj_context_get_use_proj4_init_rules(ctx, true));
proj_context_destroy(ctx);
proj_context_use_proj4_init_rules(nullptr, false);
ctx = proj_context_create();
ASSERT_TRUE(!proj_context_get_use_proj4_init_rules(ctx, true));
proj_context_destroy(ctx);
proj_context_use_proj4_init_rules(nullptr, initial_rules);
}

// ---------------------------------------------------------------------------

TEST_F(CApi, proj_is_equivalent_to_with_ctx) {
auto from_epsg = proj_create_from_database(m_ctxt, "EPSG", "7844",
PJ_CATEGORY_CRS, false, nullptr);
Expand Down
210 changes: 210 additions & 0 deletions test/unit/test_defmodel
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
#! /bin/bash
snowman2 marked this conversation as resolved.
Show resolved Hide resolved

# test_defmodel - temporary wrapper script for .libs/test_defmodel
# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-2
#
# The test_defmodel program cannot be directly executed until all the libtool
# libraries that it depends on are installed.
#
# This wrapper script should never be moved out of the build directory.
# If it is, it will not operate correctly.

# Sed substitution that helps us do robust quoting. It backslashifies
# metacharacters that are still active within double-quoted strings.
sed_quote_subst='s|\([`"$\\]\)|\\\1|g'

# Be Bourne compatible
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
emulate sh
NULLCMD=:
# Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
# is contrary to our usage. Disable this feature.
alias -g '${1+"$@"}'='"$@"'
setopt NO_GLOB_SUBST
else
case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
fi
BIN_SH=xpg4; export BIN_SH # for Tru64
DUALCASE=1; export DUALCASE # for MKS sh

# The HP-UX ksh and POSIX shell print the target directory to stdout
# if CDPATH is set.
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH

relink_command=""

# This environment variable determines our operation mode.
if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then
# install mode needs the following variables:
generated_by_libtool_version='2.4.6'
notinst_deplibs=' ../../src/libproj.la'
else
# When we are sourced in execute mode, $file and $ECHO are already set.
if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
file="$0"

# A function that is used when there is no print builtin or printf.
func_fallback_echo ()
{
eval 'cat <<_LTECHO_EOF
$1
_LTECHO_EOF'
}
ECHO="printf %s\\n"
fi

# Very basic option parsing. These options are (a) specific to
# the libtool wrapper, (b) are identical between the wrapper
# /script/ and the wrapper /executable/ that is used only on
# windows platforms, and (c) all begin with the string --lt-
# (application programs are unlikely to have options that match
# this pattern).
#
# There are only two supported options: --lt-debug and
# --lt-dump-script. There is, deliberately, no --lt-help.
#
# The first argument to this parsing function should be the
# script's ../../libtool value, followed by no.
lt_option_debug=
func_parse_lt_options ()
{
lt_script_arg0=$0
shift
for lt_opt
do
case "$lt_opt" in
--lt-debug) lt_option_debug=1 ;;
--lt-dump-script)
lt_dump_D=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%/[^/]*$%%'`
test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=.
lt_dump_F=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%^.*/%%'`
cat "$lt_dump_D/$lt_dump_F"
exit 0
;;
--lt-*)
$ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2
exit 1
;;
esac
done

# Print the debug banner immediately:
if test -n "$lt_option_debug"; then
echo "test_defmodel:test_defmodel:$LINENO: libtool wrapper (GNU libtool) 2.4.6 Debian-2.4.6-2" 1>&2
fi
}

# Used when --lt-debug. Prints its arguments to stdout
# (redirection is the responsibility of the caller)
func_lt_dump_args ()
{
lt_dump_args_N=1;
for lt_arg
do
$ECHO "test_defmodel:test_defmodel:$LINENO: newargv[$lt_dump_args_N]: $lt_arg"
lt_dump_args_N=`expr $lt_dump_args_N + 1`
done
}

# Core function for launching the target application
func_exec_program_core ()
{

if test -n "$lt_option_debug"; then
$ECHO "test_defmodel:test_defmodel:$LINENO: newargv[0]: $progdir/$program" 1>&2
func_lt_dump_args ${1+"$@"} 1>&2
fi
exec "$progdir/$program" ${1+"$@"}

$ECHO "$0: cannot exec $program $*" 1>&2
exit 1
}

# A function to encapsulate launching the target application
# Strips options in the --lt-* namespace from $@ and
# launches target application with the remaining arguments.
func_exec_program ()
{
case " $* " in
*\ --lt-*)
for lt_wr_arg
do
case $lt_wr_arg in
--lt-*) ;;
*) set x "$@" "$lt_wr_arg"; shift;;
esac
shift
done ;;
esac
func_exec_program_core ${1+"$@"}
}

# Parse options
func_parse_lt_options "$0" ${1+"$@"}

# Find the directory that this script lives in.
thisdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'`
test "x$thisdir" = "x$file" && thisdir=.

# Follow symbolic links until we get to the real thisdir.
file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'`
while test -n "$file"; do
destdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'`

# If there was a directory component, then change thisdir.
if test "x$destdir" != "x$file"; then
case "$destdir" in
[\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;;
*) thisdir="$thisdir/$destdir" ;;
esac
fi

file=`$ECHO "$file" | /bin/sed 's%^.*/%%'`
file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'`
done

# Usually 'no', except on cygwin/mingw when embedded into
# the cwrapper.
WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no
if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then
# special case for '.'
if test "$thisdir" = "."; then
thisdir=`pwd`
fi
# remove .libs from thisdir
case "$thisdir" in
*[\\/].libs ) thisdir=`$ECHO "$thisdir" | /bin/sed 's%[\\/][^\\/]*$%%'` ;;
.libs ) thisdir=. ;;
esac
fi

# Try to get the absolute directory name.
absdir=`cd "$thisdir" && pwd`
test -n "$absdir" && thisdir="$absdir"

program='test_defmodel'
progdir="$thisdir/.libs"


if test -f "$progdir/$program"; then
# Add our own library path to LD_LIBRARY_PATH
LD_LIBRARY_PATH="/home/snowal/scripts/PROJ/src/.libs:$LD_LIBRARY_PATH"

# Some systems cannot cope with colon-terminated LD_LIBRARY_PATH
# The second colon is a workaround for a bug in BeOS R4 sed
LD_LIBRARY_PATH=`$ECHO "$LD_LIBRARY_PATH" | /bin/sed 's/::*$//'`

export LD_LIBRARY_PATH

if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
# Run the actual program with our arguments.
func_exec_program ${1+"$@"}
fi
else
# The program doesn't exist.
$ECHO "$0: error: '$progdir/$program' does not exist" 1>&2
$ECHO "This script is just a wrapper for $program." 1>&2
$ECHO "See the libtool documentation for more information." 1>&2
exit 1
fi
fi
Loading