Merge pull request #8 from eternalharvest/feature/port_macosx

MacOS X への移植 + PC/SC ライブラリリンク用オプションの追加(Thx eternalharvest)
This commit is contained in:
stz2012 2017-06-21 10:20:40 +09:00 committed by GitHub
commit 40d5074034
7 changed files with 67 additions and 32 deletions

View File

@ -7,13 +7,19 @@ set(CMAKE_BUILD_TYPE "Release" CACHE STRING "default build type")
set(CMAKE_INSTALL_SO_NO_EXE False)
set(CMAKE_LEGACY_CYGWIN_WIN32 False)
if (UNIX AND NOT CYGWIN)
set(CMD_LDCONFIG "ldconfig" CACHE STRING "ldconfig command")
endif()
project(arib_std_b25 C)
enable_language(CXX)
include(GitRevision)
include(GenerateExportHeader)
find_package(PCSC REQUIRED)
if (UNIX OR MSYS)
find_program(LDCONFIG_EXECUTABLE "ldconfig")
set(WITH_PCSC_PACKAGE "libpcsclite" CACHE STRING "pkg-config package name for PC/SC")
set(WITH_PCSC_LIBRARY "" CACHE STRING "library name for PC/SC")
endif()
set(ARIB25_LIB_NAME "arib25")
set(ARIB25_CMD_NAME "b25")
@ -38,6 +44,8 @@ if(CMAKE_C_COMPILER_ID MATCHES "(GNU|Clang)")
if(UNIX AND NOT CYGWIN)
set(CMAKE_C_FLAGS "-fPIC ${CMAKE_C_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -eshow_version")
else(MINGW)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--enable-stdcall-fixup -static-libgcc")
endif()
elseif(CMAKE_C_COMPILER_ID MATCHES "(MSVC)")
add_definitions("-D_CRT_SECURE_NO_WARNINGS")
@ -46,38 +54,37 @@ elseif(CMAKE_C_COMPILER_ID MATCHES "(MSVC)")
set(CMAKE_SUPPRESS_REGENERATION TRUE)
endif()
include(GitRevision)
include(GenerateExportHeader)
find_package(WINSCARD REQUIRED)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_definitions("-DDEBUG")
endif()
add_definitions("-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64")
include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(${WINSCARD_INCLUDE_DIRS})
if(PCSC_INCLUDE_DIRS)
include_directories(${PCSC_INCLUDE_DIRS})
endif()
link_directories(${PCSC_LIBRARY_DIRS})
add_library(arib25-objlib OBJECT src/arib_std_b25.c src/b_cas_card.c src/multi2.c src/ts_section_parser.c src/version.c)
set_target_properties(arib25-objlib PROPERTIES COMPILE_DEFINITIONS ARIB25_DLL)
add_library(arib25-static STATIC $<TARGET_OBJECTS:arib25-objlib>)
set_target_properties(arib25-static PROPERTIES OUTPUT_NAME ${ARIB25_LIB_NAME})
target_link_libraries(arib25-static PRIVATE ${WINSCARD_LIBRARIES})
target_link_libraries(arib25-static PRIVATE ${PCSC_LIBRARIES})
add_library(arib25-shared SHARED $<TARGET_OBJECTS:arib25-objlib> ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
set_target_properties(arib25-shared PROPERTIES MACOSX_RPATH ON)
set_target_properties(arib25-shared PROPERTIES DEFINE_SYMBOL ARIB25_DLL)
set_target_properties(arib25-shared PROPERTIES COMPILE_DEFINITIONS ARIB25_DLL)
set_target_properties(arib25-shared PROPERTIES OUTPUT_NAME ${ARIB25_LIB_NAME})
set_target_properties(arib25-shared PROPERTIES SOVERSION ${ARIB25_MAJOR_VERSION})
set_target_properties(arib25-shared PROPERTIES VERSION ${ARIB25_VERSION_NUMBER})
target_link_libraries(arib25-shared PRIVATE ${WINSCARD_LIBRARIES})
generate_export_header(arib25-shared BASE_NAME arib25_api EXPORT_FILE_NAME arib25_api.h)
target_link_libraries(arib25-shared PRIVATE ${PCSC_LIBRARIES})
generate_export_header(arib25-shared BASE_NAME arib25_api EXPORT_FILE_NAME arib25_api.h)
add_executable(b25 src/td.c ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
set_target_properties(b25 PROPERTIES OUTPUT_NAME ${ARIB25_CMD_NAME})
target_link_libraries(b25 PRIVATE ${WINSCARD_LIBRARIES})
target_link_libraries(b25 PRIVATE ${PCSC_LIBRARIES})
target_link_libraries(b25 PRIVATE arib25-shared)
configure_file(src/config.h.in config.h @ONLY)
@ -90,7 +97,7 @@ if(UNIX AND NOT CYGWIN)
install(TARGETS arib25-static arib25-shared ARCHIVE DESTINATION lib LIBRARY DESTINATION lib)
install(FILES src/arib_std_b25.h src/b_cas_card.h src/multi2.h src/ts_section_parser.h src/portable.h ${CMAKE_CURRENT_BINARY_DIR}/arib25_api.h DESTINATION include/arib25)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${ARIB25_LIB_NAME}.pc DESTINATION lib/pkgconfig)
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -DCMD_LDCONFIG=${CMD_LDCONFIG} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/PostInstall.cmake)")
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -DLDCONFIG_EXECUTABLE=${LDCONFIG_EXECUTABLE} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/PostInstall.cmake)")
add_custom_target(uninstall ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Uninstall.cmake)
endif()

31
cmake/FindPCSC.cmake Normal file
View File

@ -0,0 +1,31 @@
find_package(PkgConfig)
if(PKG_CONFIG_FOUND AND WITH_PCSC_PACKAGE AND NOT CMAKE_CROSSCOMPILING)
if(WITH_PCSC_PACKAGE STREQUAL "libpcsclite")
pkg_check_modules(PCSC ${WITH_PCSC_PACKAGE})
else()
pkg_check_modules(PCSC REQUIRED ${WITH_PCSC_PACKAGE})
endif()
endif()
if(NOT PCSC_FOUND)
find_path(PCSC_INCLUDE_DIRS NAMES WinSCard.h winscard.h PATH_SUFFIXES PCSC)
if(WITH_PCSC_LIBRARY)
find_library(PCSC_LIBRARIES NAMES ${WITH_PCSC_LIBRARY})
else()
find_library(PCSC_LIBRARIES NAMES pcsclite PCSC WinSCard winscard)
endif()
if(PCSC_LIBRARIES)
set(PCSC_FOUND True)
endif()
endif()
if(NOT PCSC_FOUND AND NOT WITH_PCSC_LIBRARY AND WIN32)
set(PCSC_LIBRARIES winscard)
set(PCSC_FOUND True)
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(PCSC DEFAULT_MSG PCSC_LIBRARIES)
mark_as_advanced(PCSC_INCLUDE_DIRS PCSC_LIBRARIES)

View File

@ -1,7 +0,0 @@
if(UNIX AND NOT CYGWIN)
find_package(PkgConfig REQUIRED)
pkg_check_modules(WINSCARD REQUIRED libpcsclite)
else()
set(WINSCARD_LIBRARIES winscard)
set(WINSCARD_FOUND True)
endif()

View File

@ -1,6 +1,7 @@
message(STATUS "Running: ldconfig")
execute_process(COMMAND ${CMD_LDCONFIG} RESULT_VARIABLE ldconfig_result)
if (NOT ldconfig_result EQUAL 0)
message(WARNING "ldconfig failed")
if(LDCONFIG_EXECUTABLE)
message(STATUS "Running: ldconfig")
execute_process(COMMAND ${LDCONFIG_EXECUTABLE} RESULT_VARIABLE ldconfig_result)
if (NOT ldconfig_result EQUAL 0)
message(WARNING "ldconfig failed")
endif()
endif()

View File

@ -6,8 +6,10 @@
#include <math.h>
#if defined(WIN32)
#include <windows.h>
#if defined(WIN32) || defined(__CYGWIN__)
# include <windows.h>
#else
# include <wintypes.h>
#endif
#include <winscard.h>

View File

@ -7,6 +7,5 @@ Name: @CMAKE_LIBRARY_PREFIX@@ARIB25_LIB_NAME@
Description: @ARIB25_DESCRIPTION@
URL: @ARIB25_URL@
Version: @ARIB25_VERSION_STRING@
Requires: libpcsclite
Libs: -L${libdir} -l@ARIB25_LIB_NAME@
Cflags: -I${includedir}

View File

@ -2,10 +2,12 @@
#include <config.h>
#if defined(__GNUC__) || defined(__clang__)
# if defined(__x86_64__)
# if !defined(__APPLE__)
# if defined(__x86_64__)
const char elf_interp[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2";
# else
# else
const char elf_interp[] __attribute__((section(".interp"))) = "/lib/ld-linux.so.2";
# endif
# endif
#include <unistd.h>