mirror of
https://github.com/Relintai/osxcross.git
synced 2025-02-03 22:45:56 +01:00
* Support for generating fat object files with gcc and '-foc-use-gcc-libstdc++' has been removed. This feature was not 100% correctly implemented; using multiple source files did not work, i.e.: 'o32-g++ -m32 -m64 a.cpp b.cpp' would have failed; And I refuse to implement that, instead I am removing all source file handling from the wrapper with this commit for simplicity. This feature should be implemented in the gcc driver instead. This does NOT affect clang's fat object file support, which is implemented in clang's darwin driver. * '-oc-use-gcc-lib' has been renamed to '-foc-use-gcc-libstdc++'. * Added support for '-stdc++' and '-gstdc++' compiler "shortcuts" o32-clang++ --> uses libstdc++ for <= 10.8 and libc++ for >= 10.9 o32-clang++-libc++ --> uses the SDK's libc++ o32-clang++-stdc++ --> uses the SDK's libstdc++ o32-clang++-gstdc++ --> uses gcc's (build_gcc.sh) libstdc++ * Entirely rewrote the command line parser; the previous one wasn't very readable. * Minor Readme Updates * Added unit tests * Removed OSXCROSS_C_STANDARD / OSXCROSS_CXX_STANDARD support I am no longer parsing -std=, so this feature has to be dropped. Setting the language standard via an env variable isn't a good idea anyway. * Removed unneeded stuff Other Changes: * Version bump to 0.11
531 lines
17 KiB
Bash
Executable File
531 lines
17 KiB
Bash
Executable File
#!/usr/bin/env bats
|
|
|
|
#
|
|
# Requirements:
|
|
# * bats (https://github.com/sstephenson/bats)
|
|
# * OSXCRoss >= 0.11 must be in PATH
|
|
#
|
|
|
|
export OSXCROSS_UNIT_TEST=2
|
|
export OCDEBUG=1
|
|
|
|
unset OSXCROSS_NO_EXTENSION_WARNINGS
|
|
unset OSXCROSS_NO_X86_64H_DEPLOYMENT_TARGET_WARNING
|
|
unset OSXCROSS_GCC_NO_STATIC_RUNTIME
|
|
unset MACOSX_DEPLOYMENT_TARGET
|
|
unset OSXCROSS_SDKROOT
|
|
|
|
GCC_INSTALLED=1
|
|
|
|
command -v o64-clang++ >/dev/null 2>&1 || { echo "OSXCross must be in PATH" 1>&2; exit 1; }
|
|
command -v o64-g++ >/dev/null 2>&1 || GCC_INSTALLED=0
|
|
|
|
if [ $GCC_INSTALLED -eq 1 ]; then
|
|
if [ "$(o64-clang++ -foc-run-prog=osxcross-conf 2>/dev/null)" != \
|
|
"$(o64-g++ -foc-run-prog=osxcross-conf 2>/dev/null)" ]; then
|
|
true
|
|
#echo "warning: o64-clang++ and o64-g++ come from different installations; aborting unit testing" 1>&2
|
|
GCC_INSTALLED=0
|
|
fi
|
|
fi
|
|
|
|
eval $(osxcross-conf)
|
|
|
|
@test "osxcross-cmp" {
|
|
run osxcross-cmp
|
|
[ "$status" -ne 0 ]
|
|
|
|
run osxcross-cmp 10.5 '>' 10.6
|
|
[ "$status" -eq 0 ]
|
|
[ "$output" = "0" ]
|
|
|
|
run osxcross-cmp 10.11 '>' 10.10
|
|
[ "$status" -eq 0 ]
|
|
[ "$output" = "1" ]
|
|
|
|
run osxcross-cmp 10.11 '>=' 10.12
|
|
[ "$status" -eq 0 ]
|
|
[ "$output" = "0" ]
|
|
|
|
run osxcross-cmp 10.11 '<=' 10.12
|
|
[ "$status" -eq 0 ]
|
|
[ "$output" = "1" ]
|
|
|
|
run osxcross-cmp 10.10 '==' 10.10
|
|
[ "$status" -eq 0 ]
|
|
[ "$output" = "1" ]
|
|
|
|
run osxcross-cmp 10.10 '!=' 10.10
|
|
[ "$status" -eq 0 ]
|
|
[ "$output" = "0" ]
|
|
|
|
run osxcross-cmp 10.10 '?' 10.10
|
|
[ "$status" -ne 0 ]
|
|
|
|
run osxcross-cmp 10.10 '>'
|
|
[ "$status" -ne 0 ]
|
|
}
|
|
|
|
@test "cross compiler arguments" {
|
|
run o64-clang++
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *\ *clang*\ \(clang++\)\ * ]]
|
|
[[ "${lines[0]}" == *\ -target\ x86_64-apple-darwin*\ * ]]
|
|
[[ "${lines[0]}" == *\ -mlinker-version=$OSXCROSS_LINKER_VERSION\ * ]]
|
|
[[ "${lines[0]}" == *\ -isystem\ */clang/*.*/include\ * ]]
|
|
[[ "${lines[0]}" == *\ -isysroot\ */MacOSX10.*.sdk\ * ]]
|
|
[[ "${lines[0]}" == *\ -stdlib=*++*\ * ]]
|
|
[[ "${lines[0]}" == *\ -mmacosx-version-min=10.* ]]
|
|
[[ "${lines[0]}" == *\ -arch\ x86_64\ * ]]
|
|
[[ "${lines[0]}" != *\ -Wl,-no_compact_unwind\ * ]]
|
|
|
|
run o32-clang
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *\ *clang*\ \(clang\)\ * ]]
|
|
[[ "${lines[0]}" == *\ -target\ i386-apple-darwin*\ * ]]
|
|
|
|
if [ $GCC_INSTALLED -eq 1 ]; then
|
|
run o64-g++
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *\ *x86_64-apple-darwin*-base-g++*\ \(x86_64-apple-darwin*-g++\)\ * ]]
|
|
[[ "${lines[0]}" != *\ -target\ x86_64-apple-darwin*\ * ]]
|
|
[[ "${lines[0]}" != *\ -mlinker-version=*\ * ]]
|
|
[[ "${lines[0]}" != *\ -isystem\ */clang/*.*/include\ * ]]
|
|
[[ "${lines[0]}" != *\ -isysroot\ */MacOSX10.*.sdk\ * ]]
|
|
[[ "${lines[0]}" != *\ -stdlib=*++*\ * ]]
|
|
[[ "${lines[0]}" == *\ -mmacosx-version-min=10.* ]]
|
|
[[ "${lines[0]}" == *\ -m64\ * ]]
|
|
[[ "${lines[0]}" == *\ -Wl,-no_compact_unwind\ * ]]
|
|
|
|
run o32-g++
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *\ *i386-apple-darwin*-base-g++*\ \(i386-apple-darwin*-g++\)\ * ]]
|
|
fi
|
|
}
|
|
|
|
@test "OCDEBUG=2" {
|
|
OCDEBUG=2 run o64-clang++
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *debug:\ detected\ target\ triple:\ *-apple-darwin* ]]
|
|
[[ "${lines[1]}" == *debug:\ detected\ compiler:\ * ]]
|
|
[[ "${lines[2]}" == *debug:\ detected\ stdlib:\ * ]]
|
|
}
|
|
|
|
@test "argv[0] parsing" {
|
|
OSXCROSS_PROG_NAME=x86_64-apple-darwin999999-clang++ run o64-clang++
|
|
[ "$status" -ne 0 ]
|
|
[[ "${lines[0]}" == *warning:\ this\ wrapper\ was\ built\ for\ target\ \'darwin*\' ]]
|
|
[[ "${lines[1]}" == *error:\ cannot\ find\ Mac\ OS\ X\ SDK\ \(expected\ in:\ */SDK/MacOSX10.999995.sdk\) ]]
|
|
|
|
OSXCROSS_PROG_NAME=x86_64-apple-$OSXCROSS_TARGET-gcc run o64-clang++
|
|
[ "$status" -eq 0 ]
|
|
[[ -z "$OUTPUT" ]]
|
|
|
|
OSXCROSS_PROG_NAME=x86_64-apple-$OSXCROSS_TARGET-g++ run o64-clang++
|
|
[ "$status" -eq 0 ]
|
|
[[ -z "$OUTPUT" ]]
|
|
|
|
OSXCROSS_PROG_NAME=x86_64-apple-$OSXCROSS_TARGET-cc run o64-clang++
|
|
[ "$status" -eq 0 ]
|
|
[[ -z "$OUTPUT" ]]
|
|
|
|
OSXCROSS_PROG_NAME=x86_64-apple-$OSXCROSS_TARGET-c++ run o64-clang++
|
|
[ "$status" -eq 0 ]
|
|
[[ -z "$OUTPUT" ]]
|
|
|
|
OSXCROSS_PROG_NAME=i386-apple-$OSXCROSS_TARGET-clang++ run o64-clang++
|
|
[ "$status" -eq 0 ]
|
|
|
|
OSXCROSS_PROG_NAME=i486-apple-$OSXCROSS_TARGET-clang++ run o64-clang++
|
|
[ "$status" -eq 0 ]
|
|
|
|
OSXCROSS_PROG_NAME=i586-apple-$OSXCROSS_TARGET-clang++ run o64-clang++
|
|
[ "$status" -eq 0 ]
|
|
|
|
OSXCROSS_PROG_NAME=i686-apple-$OSXCROSS_TARGET-clang++ run o64-clang++
|
|
[ "$status" -eq 0 ]
|
|
|
|
OSXCROSS_PROG_NAME=i786-apple-$OSXCROSS_TARGET-clang++ run o64-clang++
|
|
[ "$status" -ne 0 ]
|
|
|
|
OSXCROSS_PROG_NAME=armv6-apple-$OSXCROSS_TARGET-clang++ run o64-clang++
|
|
[ "$status" -ne 0 ]
|
|
|
|
OSXCROSS_PROG_NAME=x86_64-mapple-$OSXCROSS_TARGET-clang++ run o64-clang++
|
|
[ "$status" -ne 0 ]
|
|
|
|
OSXCROSS_PROG_NAME=x86_64-apple-ddarwin13-clang++ run o64-clang++
|
|
[ "$status" -ne 0 ]
|
|
|
|
OSXCROSS_PROG_NAME=x86_64-apple--clang++ run o64-clang++
|
|
[ "$status" -ne 0 ]
|
|
|
|
OSXCROSS_PROG_NAME=x86_64-apple-$OSXCROSS_TARGET-foo run o64-clang++
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *warning:\ unknown\ compiler\ \'foo\' ]]
|
|
|
|
OSXCROSS_PROG_NAME= run o64-clang++
|
|
[ "$status" -ne 0 ]
|
|
|
|
OSXCROSS_PROG_NAME=? run o64-clang++
|
|
[ "$status" -ne 0 ]
|
|
}
|
|
|
|
@test "command line parsing" {
|
|
run o64-clang++ -mmacosx-version-min=10.4 -g -I test1 -march=native -Itest2 -O2 -stdlib=libstdc++ -stdlib=default -stdlib=libstdc++ -otest1 -o test2 foo.cpp -c
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *\ -mmacosx-version-min=10.4*\ * ]]
|
|
[[ "${lines[0]}" == *\ -g\ *\ * ]]
|
|
[[ "${lines[0]}" == *\ -I\ test1\ * ]]
|
|
[[ "${lines[0]}" == *\ -march=native\ * ]]
|
|
[[ "${lines[0]}" == *\ -Itest2\ * ]]
|
|
[[ "${lines[0]}" == *\ -O2\ * ]]
|
|
[[ "${lines[0]}" != *\ -stdlib=default\ * ]]
|
|
[[ "${lines[0]}" == *\ -otest1\ * ]]
|
|
[[ "${lines[0]}" == *\ -o\ test2\ * ]]
|
|
[[ "${lines[0]}" == *\ foo.cpp\ * ]]
|
|
[[ "${lines[0]}" == *\ -c\ * ]]
|
|
}
|
|
|
|
@test "-mmacosx-version-min/MACOSX_DEPLOYMENT_TARGET" {
|
|
run o64-clang++ -mmacosx-version-min=10.10000
|
|
[ "$status" -ne 0 ]
|
|
[[ "${lines[0]}" == *error:\ targeted\ OS\ X\ version\ must\ be\ \<=\ 10.*.0\ \(SDK\) ]]
|
|
|
|
run o64-clang++ -mmacosx-version-min=abc
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *warning:\ \'-mmacosx-version-min=\'\ \(0.0.0\ !=\ abc\) ]]
|
|
[[ "${lines[1]}" != *\ -mmacosx-version-min=abc\ * ]]
|
|
[[ "${lines[1]}" != *\ -mmacosx-version-min=0.0*\ * ]]
|
|
|
|
run o64-clang++ -mmacosx-version-min=10.0
|
|
[ "$status" -ne 0 ]
|
|
[[ "${lines[0]}" == *targeted\ OS\ X\ version\ must\ be\ \>=\ 10.4 ]]
|
|
|
|
run o64-clang++ -mmacosx-version-min=10.0 -mmacosx-version-min=$OSXCROSS_SDK_VERSION
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *\ -mmacosx-version-min=$OSXCROSS_SDK_VERSION.*\ * ]]
|
|
|
|
MACOSX_DEPLOYMENT_TARGET=10.4 run o64-clang++ -mmacosx-version-min=10.0 -mmacosx-version-min=10.4
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *\ -mmacosx-version-min=10.4.*\ * ]]
|
|
|
|
MACOSX_DEPLOYMENT_TARGET=10.4 run o64-clang++
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *\ -mmacosx-version-min=10.4.*\ * ]]
|
|
}
|
|
|
|
@test "-stdlib/-stdc++/-gstdc++/-foc-use-gcc-libstdc++/-libc++" {
|
|
function libcxx()
|
|
{
|
|
run $@
|
|
if [[ "$@" == *-mmacosx-version-min=10.4* ]]; then
|
|
[ "$status" -ne 0 ]
|
|
[[ "${lines[0]}" == *error:\ libc++\ requires\ \'-mmacosx-version-min=10.7\'\ \(or\ later\) ]]
|
|
else
|
|
[ "$status" -eq 0 ]
|
|
if [[ $1 == *clang++* ]]; then
|
|
[[ "${lines[0]}" == *\ -cxx-isystem\ */SDK/MacOSX10.*.sdk/usr/include/c++/v1\ * ]]
|
|
[[ "${lines[0]}" == *\ -stdlib=libc++\ * ]]
|
|
[[ "${lines[0]}" != *\ -stdlib=libstdc++\ * ]]
|
|
else
|
|
if [[ "$@" == *-stdlib* ]]; then
|
|
[[ "${lines[0]}" == *warning:\ \'-stdlib=\'\ is\ an\ osxcross\ extension* ]]
|
|
else
|
|
[[ "${lines[0]}" == *\ -nostdinc++\ -nodefaultlibs\ -lc\ -lc++\ -lgcc_s.10.5\ * ]]
|
|
[[ "${lines[0]}" == *\ -isystem\ */SDK/MacOSX10.*.sdk/usr/include/c++/v1\ * ]]
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
if [ $(osxcross-cmp $OSXCROSS_SDK_VERSION '>=' 10.7) -eq 1 ]; then
|
|
libcxx "o64-clang++" "-stdlib=libc++"
|
|
libcxx "o64-clang++-libc++"
|
|
libcxx "o64-clang++-libc++" "-mmacosx-version-min=10.4"
|
|
if [ $GCC_INSTALLED -eq 1 ]; then
|
|
libcxx "o64-g++-libc++"
|
|
libcxx "o64-g++" "-stdlib=libc++"
|
|
libcxx "o64-g++" "-stdlib=libc++"
|
|
fi
|
|
fi
|
|
|
|
function stdcxx()
|
|
{
|
|
run $@
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *\ -stdlib=libstdc++\ * ]]
|
|
[[ "${lines[0]}" != *\ -stdlib=libc++\ * ]]
|
|
[[ "${lines[0]}" != *\ -cxx-isystem\ */SDK/MacOSX10.*.sdk/usr/include/c++/v1\ * ]]
|
|
[[ "${lines[0]}" == *\ -cxx-isystem\ */SDK/MacOSX10.*.sdk/usr/include/c++/4.*\ * ]]
|
|
[[ "${lines[0]}" == *\ -cxx-isystem\ */SDK/MacOSX10.*.sdk/usr/include/c++/4.*/*-apple-darwin*\ * ]]
|
|
[[ "${lines[0]}" == *\ -cxx-isystem\ */SDK/MacOSX10.*.sdk/usr/include/c++/4.*/backward\ * ]]
|
|
}
|
|
|
|
stdcxx "o64-clang++" "-stdlib=libstdc++"
|
|
stdcxx "o64-clang++-stdc++"
|
|
|
|
run o64-clang++-stdc++ -stdlib=libc++
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *warning:\ ignoring\ \'-stdlib=libc++\' ]]
|
|
|
|
function gstdcxx()
|
|
{
|
|
run $@
|
|
if [[ "${lines[0]}" == *error:\ \'-foc-use-gcc-libstdc++\'\ requires\ gcc\ to\ be\ installed\ \(./build_gcc.sh\) ]];
|
|
then
|
|
[ "$status" -ne 0 ]
|
|
else
|
|
[ "$status" -eq 0 ]
|
|
if [[ $1 == *clang++* ]]; then
|
|
[[ "${lines[0]}" == *\ -Qunused-arguments\ * ]]
|
|
fi
|
|
[[ "${lines[0]}" == *\ -cxx-isystem\ */x86_64-apple-darwin*/include/c++/*.*\ * ]]
|
|
[[ "${lines[0]}" == *\ -cxx-isystem\ */x86_64-apple-darwin*/include/c++/*.*/x86_64-apple-darwin*\ * ]]
|
|
[[ "${lines[0]}" == *\ -cxx-isystem\ */x86_64-apple-darwin*/include/c++/*.*/backward\ * ]]
|
|
if [[ $1 == *++ ]]; then
|
|
[[ "${lines[0]}" == *\ -nostdinc++\ * ]]
|
|
[[ "${lines[0]}" == *\ -stdlib=libstdc++\ * ]]
|
|
[[ "${lines[0]}" == *\ -nodefaultlibs\ * ]]
|
|
[[ "${lines[0]}" == *\ -Wl,-no_compact_unwind\ * ]]
|
|
if [ -n "$OSXCROSS_GCC_NO_STATIC_RUNTIME" ]; then
|
|
[[ "${lines[0]}" == *\ -L\ */lib/gcc/x86_64-apple-darwin*/*.*\ * ]]
|
|
[[ "${lines[0]}" == *\ -L\ */x86_64-apple-darwin*/lib*\ * ]]
|
|
[[ "${lines[0]}" == *\ -l\ stdc++\ * ]]
|
|
[[ "${lines[0]}" == *\ -l\ supc++\ * ]]
|
|
[[ "${lines[0]}" == *\ -l\ gcc\ * ]]
|
|
[[ "${lines[0]}" == *\ -l\ gcc_eh\ * ]]
|
|
else
|
|
[[ "${lines[0]}" == *\ */x86_64-apple-darwin*/lib*/libstdc++.a\ * ]]
|
|
[[ "${lines[0]}" == *\ */x86_64-apple-darwin*/lib*/libsupc++.a\ * ]]
|
|
[[ "${lines[0]}" == *\ */lib/gcc/x86_64-apple-darwin*/*.*/libgcc.a\ * ]]
|
|
[[ "${lines[0]}" == *\ */lib/gcc/x86_64-apple-darwin*/*.*/libgcc_eh.a\ * ]]
|
|
fi
|
|
else
|
|
[[ "${lines[0]}" != *\ -l\ stdc++\ * ]]
|
|
[[ "${lines[0]}" != *\ -l\ supc++\ * ]]
|
|
[[ "${lines[0]}" != *\ *libstdc++.a\ * ]]
|
|
[[ "${lines[0]}" != *\ *libsupc++.a\ * ]]
|
|
fi
|
|
fi
|
|
}
|
|
|
|
gstdcxx "o64-clang++" "-foc-use-gcc-libstdc++"
|
|
gstdcxx "o64-clang" "-foc-use-gcc-libstdc++"
|
|
gstdcxx "o64-clang++-gstdc++" "-foc-use-gcc-libstdc++"
|
|
gstdcxx "o32-clang++-gstdc++" "-foc-use-gcc-libstdc++"
|
|
OSXCROSS_GCC_NO_STATIC_RUNTIME=1 gstdcxx "o64-clang++" "-foc-use-gcc-libstdc++"
|
|
OSXCROSS_GCC_NO_STATIC_RUNTIME=1 gstdcxx "o64-clang++" "-foc-use-gcc-libstdc++" "-m32"
|
|
|
|
if [ $GCC_INSTALLED -eq 1 ]; then
|
|
run o64-g++
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *\ -static-libgcc\ * ]]
|
|
[[ "${lines[0]}" == *\ -static-libstdc++\ * ]]
|
|
|
|
OSXCROSS_GCC_NO_STATIC_RUNTIME=1 run o64-g++
|
|
[[ "${lines[0]}" != *\ -static-libgcc\ * ]]
|
|
[[ "${lines[0]}" != *\ -static-libstdc++\ * ]]
|
|
fi
|
|
|
|
run o64-clang++ -stdlib=default
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" != *\ -stdlib=default\ * ]]
|
|
|
|
run o64-clang++ -stdlib=foo
|
|
[ "$status" -eq 1 ]
|
|
[[ "${lines[0]}" == *error:\ value\ of\ \'-stdlib=\'\ must\ be\ \'default\',\ \'libc++\'\ or\ \'libstdc++\' ]]
|
|
}
|
|
|
|
@test "-arch/-m32/-m64/-m16/-mx32" {
|
|
run o64-clang++ -arch x86_64 -arch i386 -arch x86_64 -arch i386
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *\ -arch\ x86_64\ \-arch\ i386\ * ]]
|
|
|
|
run o64-clang++ -m16
|
|
[ "$status" -eq 1 ]
|
|
|
|
run o64-clang++ -mx32
|
|
[ "$status" -eq 1 ]
|
|
|
|
run o64-clang++ -arch x86_64h
|
|
[ "$status" -eq 0 ] || [[ "${lines[0]}" == *error:\ \'x86_64\'\ requires\ Mac\ OS\ X\ SDK\ 10.8\ \(or\ later\) ]]
|
|
|
|
run o64-clang++ -arch foo
|
|
[ "$status" -ne 0 ]
|
|
[[ "${lines[0]}" == *warning:\ \'-arch\':\ \unknown\ architecture\ \'foo\' ]]
|
|
[[ "${lines[1]}" == *warning:\ \'-arch\':\ \'foo\'\ !=\ \'unknown\' ]]
|
|
[[ "${lines[2]}" == *error:\ unsupported\ architecture:\ \'unknown\' ]]
|
|
|
|
run o64-clang++ -arch armv7
|
|
[ "$status" -ne 0 ]
|
|
[[ "${lines[0]}" == *error:\ unsupported\ architecture:\ \'armv7\' ]]
|
|
|
|
run o64-clang++ -arch i386
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" != *\ -arch\ x86_64\ * ]]
|
|
|
|
run o64-clang++ -m32
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *\ -arch\ i386\ * ]]
|
|
|
|
if [ $(osxcross-cmp $OSXCROSS_SDK_VERSION '>=' 10.8) -eq 1 ]; then
|
|
run o64-clang++ -arch x86_64h -mmacosx-version-min=10.7
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *warning:\ \'-mmacosx-version-min=\'\ should\ be\ \'\>=\ 10.8\'\ for\ architecture\ \'x86_64h\' ]]
|
|
|
|
OSXCROSS_NO_X86_64H_DEPLOYMENT_TARGET_WARNING=1 run o64-clang++ -arch x86_64h -mmacosx-version-min=10.7
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" != *warning:\ * ]]
|
|
fi
|
|
|
|
if [ $GCC_INSTALLED -eq 1 ]; then
|
|
run o64-g++ -arch x86_64 -arch i386 -arch x86_64 -arch i386
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *\ -m32\ * ]]
|
|
[[ "${lines[0]}" != *\ -m64\ * ]]
|
|
[[ "${lines[0]}" != *\ -arch\ * ]]
|
|
|
|
run o64-g++ -arch x86_64h
|
|
[ "$status" -eq 1 ]
|
|
[[ "${lines[0]}" == *error:\ gcc\ does\ not\ support\ architecture\ \'x86_64h\' ]]
|
|
fi
|
|
}
|
|
|
|
@test "bad include path warning" {
|
|
if [ $(uname -s) == "Darwin" ]; then
|
|
skip "Not supported"
|
|
fi
|
|
|
|
run o64-clang++ -I/usr/..////////usr//include
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *warning:\ possibly\ dangerous\ include\ path\ specified:\ \'-I\ /usr/..////////usr//include\'\ \(/usr/include\) ]]
|
|
[[ "${lines[1]}" == *info:\ you\ can\ silence\ this\ warning\ via\ \'OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1\'\ \(env\)* ]]
|
|
[[ "${lines[2]}" == *\ -I/usr/..////////usr//include\ * ]]
|
|
|
|
if [ $GCC_INSTALLED -eq 1 ]; then
|
|
OSXCROSS_NO_INCLUDE_PATH_WARNINGS=1 run o64-g++ -I/usr/include
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" != *warning:\ * ]]
|
|
fi
|
|
}
|
|
|
|
@test "OSXCROSS_MP_INC" {
|
|
if [ -d "${OSXCROSS_TARGET_DIR}/macports" ]; then
|
|
function macports()
|
|
{
|
|
run $@
|
|
[ "$status" -eq 0 ]
|
|
if [ -d "${OSXCROSS_TARGET_DIR}/macports/pkgs/opt/local/include" ]; then
|
|
[[ "${lines[0]}" == *\ -isystem\ */macports/pkgs/opt/local/include\ * ]]
|
|
fi
|
|
if [ -d "${OSXCROSS_TARGET_DIR}/macports/pkgs/opt/local/lib" ]; then
|
|
[[ "${lines[0]}" == *\ -L\ */macports/pkgs/opt/local/lib\ * ]]
|
|
fi
|
|
if [ -d "${OSXCROSS_TARGET_DIR}/macports/pkgs/opt/local/Library/Frameworks" ]; then
|
|
[[ "${lines[0]}" == *\ -iframework\ */macports/pkgs/opt/local/Library/Frameworks\ * ]]
|
|
fi
|
|
|
|
if [[ $1 == *clang++* ]]; then
|
|
[[ "${lines[0]}" == *\ -Qunused-arguments\ * ]]
|
|
fi
|
|
}
|
|
|
|
OSXCROSS_MP_INC=1 macports o64-clang++
|
|
|
|
if [ $GCC_INSTALLED -eq 1 ]; then
|
|
OSXCROSS_MP_INC=1 macports o64-g++
|
|
fi
|
|
fi
|
|
}
|
|
|
|
@test "OSXCROSS_SDKROOT" {
|
|
OSXCROSS_SDKROOT=/dev/null/MacOSX10.10.sdk run o64-clang++
|
|
[ "$status" -ne 0 ]
|
|
[[ "${lines[0]}" == *error:\ cannot\ find\ Mac\ OS\ X\ SDK\ \(expected\ in:\ /dev/null/MacOSX10.10.sdk\) ]]
|
|
|
|
OSXCROSS_SDKROOT=$OSXCROSS_SDK run o64-clang++
|
|
[ "$status" -eq 0 ]
|
|
}
|
|
|
|
@test "xcrun" {
|
|
run xcrun -sdk
|
|
[ "$status" -ne 0 ]
|
|
[[ "${lines[0]}" == *error:\ too\ few\ arguments\ for\ \'-sdk\' ]]
|
|
|
|
run xcrun -sdk /
|
|
[ "$status" -eq 0 ]
|
|
|
|
run xcrun -sdk /dev/null
|
|
[ "$status" -ne 0 ]
|
|
[[ "${lines[0]}" == *error:\ xcrun:\ \'-sdk\':\ expected\ Mac\ OS\ X\ SDK ]]
|
|
|
|
OSXCROSS_SDKROOT=/dev/null/MacOSX10.9.sdk SDKROOT=/dev/null/MacOSX10.10.sdk run xcrun
|
|
[ "$status" -ne 0 ]
|
|
[[ "${lines[0]}" == *error:\ xcrun:\ \'-sdk\':\ directory\ \'/dev/null/MacOSX10.10.sdk\'\ does\ not\ exist ]]
|
|
|
|
run xcrun -sdk $OSXCROSS_SDK clang
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == *debug:\ \<--\ * ]]
|
|
|
|
run xcrun -f clang
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == */bin/x86_64-apple-darwin*-clang ]]
|
|
|
|
run xcrun -find /usr/bin/ld
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == */bin/x86_64-apple-darwin*-ld ]]
|
|
|
|
run xcrun -show-sdk-path -show-sdk-version
|
|
[ "$status" -eq 0 ]
|
|
[ "${lines[0]}" == "$OSXCROSS_SDK" ]
|
|
[ "${lines[1]}" == "$OSXCROSS_SDK_VERSION" ]
|
|
|
|
xcrun_log=1 run xcrun clang
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == */bin/x86_64-apple-darwin*-clang ]]
|
|
|
|
run xcrun -log -l clang
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[1]}" == *debug:\ \<--\ * ]]
|
|
|
|
run xcrun -run clang
|
|
[ "$status" -eq 0 ]
|
|
|
|
run xcrun -r clang
|
|
[ "$status" -eq 0 ]
|
|
|
|
run xcrun -foo
|
|
[ "$status" -ne 0 ]
|
|
|
|
run xcrun -k -kill-cache -n -no-cache -toolchain / -v -verbose -h -help
|
|
[ "$status" -eq 0 ]
|
|
}
|
|
|
|
@test "sw_vers" {
|
|
run sw_vers
|
|
[ "$status" -eq 0 ]
|
|
[ "${lines[0]}" == "ProductName: Mac OS X" ]
|
|
[ "${lines[1]}" == "ProductVersion: $OSXCROSS_OSX_VERSION_MIN" ]
|
|
[[ "${lines[2]}" == BuildVersion:\ \ \ * ]]
|
|
|
|
run sw_vers -productName
|
|
[ "$status" -eq 0 ]
|
|
[ "${lines[0]}" == "Mac OS X" ]
|
|
|
|
OSXCROSS_SW_VERS_OSX_VERSION=10.15 MACOSX_DEPLOYMENT_TARGET=10.16 run sw_vers -productVersion
|
|
[ "$status" -eq 0 ]
|
|
[ "${lines[0]}" == "10.15" ]
|
|
|
|
MACOSX_DEPLOYMENT_TARGET=10.16 run sw_vers -productVersion
|
|
[ "$status" -eq 0 ]
|
|
[ "${lines[0]}" == "10.16" ]
|
|
|
|
run sw_vers -buildVersion
|
|
[ "$status" -eq 0 ]
|
|
[[ "${lines[0]}" == * ]]
|
|
|
|
run sw_vers -foo
|
|
[ "$status" -ne 0 ]
|
|
}
|