mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 13:10:12 +03:00
50 lines
1.1 KiB
Bash
50 lines
1.1 KiB
Bash
#! /usr/bin/env bash
|
|
|
|
# bypassing this test:
|
|
# - on windows
|
|
# - on FreeBSD 32 bits
|
|
# test fails looling for liborig.so; don't know why but shouldn't block fixing all other platforms
|
|
# - on Circle CI with no_pic. (need PIC to run the test)
|
|
if [[ $OS = *"win"* ]]; then exit 0; fi
|
|
if [[ $OS = *"freebsd"* ]] && [[ $MODEL = *"32"* ]]; then exit 0; fi
|
|
if [ ${PIC:-1} == "0" ]; then exit 0; fi
|
|
|
|
TEST_DIR=${OUTPUT_BASE}
|
|
ORIG_D=$TEST_DIR/orig.d
|
|
ORIG_SO=$TEST_DIR/liborig${SOEXT}
|
|
OVERRIDE_D=$TEST_DIR/override.d
|
|
OVERRIDE_SO=$TEST_DIR/liboverride${SOEXT}
|
|
APP_D=$TEST_DIR/app.d
|
|
|
|
mkdir -p $TEST_DIR
|
|
|
|
cat << EOF | $DMD -m$MODEL -fPIC -shared -of$ORIG_SO -
|
|
import core.stdc.stdio;
|
|
|
|
extern(C) int func()
|
|
{
|
|
printf("liborig\n");
|
|
return 1;
|
|
}
|
|
EOF
|
|
|
|
cat << EOF | $DMD -m$MODEL -fPIC -shared -of$OVERRIDE_SO -
|
|
import core.stdc.stdio;
|
|
|
|
extern(C) int func()
|
|
{
|
|
printf("liboverride\n");
|
|
return 2;
|
|
}
|
|
EOF
|
|
|
|
cat << EOF | LD_LIBRARY_PATH=$TEST_DIR $DMD -m$MODEL -L-L$TEST_DIR -L$OVERRIDE_SO -run -
|
|
extern(C) int func();
|
|
|
|
pragma(lib, "orig");
|
|
|
|
void main()
|
|
{
|
|
assert(func() == 2);
|
|
}
|
|
EOF
|