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

MacOS: master fails to compile with Xcode-10 #1485

Closed
mouse07410 opened this issue Sep 21, 2018 · 11 comments
Closed

MacOS: master fails to compile with Xcode-10 #1485

mouse07410 opened this issue Sep 21, 2018 · 11 comments

Comments

@mouse07410
Copy link
Contributor

mouse07410 commented Sep 21, 2018

Problem Description

Xcode-10 in file

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/PCSC.framework/Headers/pcsclite.h

defines macro PCSC_API, which is re-defined in src/libopensc/internal-winscard.h.

Proposed Resolution

diff --git a/src/libopensc/internal-winscard.h b/src/libopensc/internal-winscard.h
index 011167dd..ad74dbdb 100644
--- a/src/libopensc/internal-winscard.h
+++ b/src/libopensc/internal-winscard.h
@@ -142,6 +142,7 @@ typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
 #define PCSC_API WINAPI
 #elif defined(USE_CYGWIN)
 #define PCSC_API __stdcall
 #else
+#undef PCSC_API
 #define PCSC_API
 #endif

Actually, the above fix should include guards - Xcode-9 and prior did not seem to define that macro, at least compilation did not fail...

Steps to reproduce

Just try a clean compile, like

$ make distclean
$ ./bootstrap && MacOSX/build

Observe the results.

Logs

. . . . .
  CC       libopensc_la-reader-tr03119.lo
  CC       libopensc_la-card-setcos.lo
In file included from reader-pcsc.c:41:
./internal-winscard.h:146:9: error: 'PCSC_API' macro redefined [-Werror,-Wmacro-redefined]
#define PCSC_API
        ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/PCSC.framework/Headers/pcsclite.h:51:9: note: 
      previous definition is here
#define PCSC_API extern __attribute__((visibility ("default")))
        ^
1 error generated.
make[3]: *** [libopensc_la-reader-pcsc.lo] Error 1
make[3]: *** Waiting for unfinished jobs....
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
@mouse07410 mouse07410 changed the title MacOS: master fails to compile MacOS: master fails to compile with Xcode-10 Sep 21, 2018
@mouse07410
Copy link
Contributor Author

mouse07410 commented Sep 21, 2018

Fixing this problem allows the compilation to proceed, but the build still fails in OpenSC.tokend:

. . . . .
    cd /Users/ur20980/src/OpenSC/OpenSC.tokend
    export LANG=en_US.US-ASCII
    clang -x c++ -arch x86_64 -fmessage-length=119 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -fcolor-diagnostics -stdlib=libstdc++ -Wno-trigraphs -fpascal-strings -Os -fno-common -Wno-missing-field-initializers -Wno-missing-prototypes -Wunreachable-code -Wno-non-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors -Wno-missing-braces -Wparentheses -Wswitch -Wunused-function -Wno-unused-label -Wno-unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wno-float-conversion -Wnon-literal-null-conversion -Wobjc-literal-conversion -Wshorten-64-to-32 -Wno-newline-eof -Wno-c++11-extensions -DLIMITED_SIGNING -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -fasm-blocks -fstrict-aliasing -Wdeprecated-declarations -Winvalid-offsetof -mmacosx-version-min=10.10 -g -Wno-sign-conversion -Winfinite-recursion -Wmove -Wcomma -Wblock-capture-autoreleasing -Wstrict-prototypes -Wrange-loop-analysis -Wno-semicolon-before-method-body -iquote /Users/ur20980/src/OpenSC/OpenSC.tokend/build/Tokend.build/libtokend.build/tokend-generated-files.hmap -I/Users/ur20980/src/OpenSC/OpenSC.tokend/build/Tokend.build/libtokend.build/tokend-own-target-headers.hmap -I/Users/ur20980/src/OpenSC/OpenSC.tokend/build/Tokend.build/libtokend.build/tokend-all-target-headers.hmap -iquote /Users/ur20980/src/OpenSC/OpenSC.tokend/build/Tokend.build/libtokend.build/tokend-project-headers.hmap -I/Users/ur20980/src/OpenSC/OpenSC.tokend/build/include -I/Users/ur20980/src/OpenSC/OpenSC.tokend/build/opensc-src -I/Users/ur20980/src/OpenSC/openssl_bin/Library/OpenSC/include -I/Users/ur20980/src/OpenSC/OpenSC.tokend/build/Tokend.build/libtokend.build/DerivedSources/x86_64 -I/Users/ur20980/src/OpenSC/OpenSC.tokend/build/Tokend.build/libtokend.build/DerivedSources -Wmost -Wno-four-char-constants -Wno-unknown-pragmas -F/Users/ur20980/src/OpenSC/OpenSC.tokend/build -Fbuild -DNDEBUG -Os -MMD -MT dependencies -MF /Users/ur20980/src/OpenSC/OpenSC.tokend/build/Tokend.build/libtokend.build/Objects-normal/x86_64/Token.d --serialize-diagnostics /Users/ur20980/src/OpenSC/OpenSC.tokend/build/Tokend.build/libtokend.build/Objects-normal/x86_64/Token.dia -c /Users/ur20980/src/OpenSC/OpenSC.tokend/Tokend/Token.cpp -o /Users/ur20980/src/OpenSC/OpenSC.tokend/build/Tokend.build/libtokend.build/Objects-normal/x86_64/Token.o
warning: include path for stdlibc++ headers not found; pass '-std=libc++' on the command line to use the libc++
      standard library instead [-Wstdlibcxx-not-found]
In file included from /Users/ur20980/src/OpenSC/OpenSC.tokend/Tokend/Token.cpp:29:
In file included from /Users/ur20980/src/OpenSC/OpenSC.tokend/Tokend/Token.h:33:
In file included from /Users/ur20980/src/OpenSC/OpenSC.tokend/build/security_utilities.framework/Headers/osxcode.h:25:
In file included from /Users/ur20980/src/OpenSC/OpenSC.tokend/build/security_utilities.framework/Headers/refcount.h:31:
In file included from /Users/ur20980/src/OpenSC/OpenSC.tokend/build/security_utilities.framework/Headers/threading.h:35:
In file included from /Users/ur20980/src/OpenSC/OpenSC.tokend/build/security_utilities.framework/Headers/utilities.h:32:
In file included from /Users/ur20980/src/OpenSC/OpenSC.tokend/build/security_cdsa_utilities.framework/Headers/cssmbridge.h:32:
In file included from /Users/ur20980/src/OpenSC/OpenSC.tokend/build/security_cdsa_utilities.framework/Headers/cssmerrors.h:31:
/Users/ur20980/src/OpenSC/OpenSC.tokend/build/security_utilities.framework/Headers/errors.h:33:10: fatal error: 
      'exception' file not found
#include <exception>
         ^~~~~~~~~~~


CompileC /Users/ur20980/src/OpenSC/OpenSC.tokend/build/Tokend.build/libtokend.build/Objects-normal/x86_64/SelectionPredicate.o /Users/ur20980/src/OpenSC/OpenSC.tokend/Tokend/SelectionPredicate.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target: libtokend)

The missing file exists where one would expect Xcode C++ headers to reside:

$ find /Applications/Xcode.app -name exception -print
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/exception
$ ll /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/exception
-rw-r--r--  1 root  wheel  9570 Jun 15 14:12 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/exception
$

The fact that OpenSC.tokend is built with libstdc++ seems to be causing this problem.

@bwesterb
Copy link

bwesterb commented Oct 4, 2018

I also hit your first problem. Your patch fixes the problem for me.

@mouse07410
Copy link
Contributor Author

@bwesterb how did you avoid or fix the second problem? Or are you not using OpenSC.tokend?

@bwesterb
Copy link

bwesterb commented Oct 4, 2018

I didn't hit it when running bootstrap && ./configure && ./make && sudo ./make install. I don't think I use OpenSC.tokend.

@mouse07410
Copy link
Contributor Author

mouse07410 commented Oct 4, 2018

What OS are you running on? The process your described does not build OpenSC.tokend, and in general is suitable for Linux.

@bwesterb
Copy link

bwesterb commented Oct 4, 2018

macOS Mojave

@mouse07410
Copy link
Contributor Author

I see. So Safari and Apple Mail (and system components for login, screensaver unlock, etc.) can work with the token regardless, via pivtoken that's included with the OS. And OpenSC supplies the command-line tools, and opensc-pkcs11.so PKCS#11 library that you can point Firefox and Adobe Acrobat at...

@bwesterb
Copy link

bwesterb commented Oct 5, 2018

Actually I only use pkcs11.so to use a yubikey to store my ssh private key.

@frankmorgner
Copy link
Member

@mouse07410
Copy link
Contributor Author

@frankmorgner I wish I knew how to fix the tokend build on Mojave (or even with Xcode-10). In fact, that's what stopping me from upgrading my main machine to Mojave right now.

@bwesterb
Copy link

c3bef7d fixed the issue for me, thanks!

lbschenkel added a commit to lbschenkel/macports-ports that referenced this issue Nov 13, 2018
- add upstream patch to fix errors on Xcode 10 [1]
- add patch to fix errors on Xcode 10+macOS 13 [2]

[1] OpenSC/OpenSC#1485
[2] OpenSC/OpenSC#1486

Fixes: https://trac.macports.org/ticket/57535
lbschenkel added a commit to macports/macports-ports that referenced this issue Nov 13, 2018
- add upstream patch to fix errors on Xcode 10 [1]
- add patch to fix errors on Xcode 10+macOS 13 [2]

[1] OpenSC/OpenSC#1485
[2] OpenSC/OpenSC#1486

Fixes: https://trac.macports.org/ticket/57535
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants