diff --git a/CMakeLists.txt b/CMakeLists.txt index f49a052e3..f2ada27e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,17 @@ else() set(MINGW FALSE) endif() +if(CMAKE_SYSTEM_NAME STREQUAL "tvOS") + set(TVOS TRUE) +else() + set(TVOS FALSE) +endif() +if(CMAKE_SYSTEM_NAME STREQUAL "watchOS") + set(WATCHOS TRUE) +else() + set(WATCHOS FALSE) +endif() + if(NOT CMAKE_BUILD_TYPE) message(STATUS "No build type selected, default to Release") set(CMAKE_BUILD_TYPE "Release") @@ -38,7 +49,7 @@ macro(xcheck_add_c_compiler_flag FLAG) endmacro() xcheck_add_c_compiler_flag(-Wall) -if(NOT MSVC AND NOT IOS) +if(NOT MSVC AND NOT IOS AND NOT TVOS AND NOT WATCHOS) xcheck_add_c_compiler_flag(-Werror) xcheck_add_c_compiler_flag(-Wextra) endif() @@ -241,6 +252,12 @@ if(WIN32) # NB: Windows 7 is EOL and we are only supporting in so far as it doesn't interfere with progress. list(APPEND qjs_defines WIN32_LEAN_AND_MEAN _WIN32_WINNT=0x0601) endif() +if(TVOS) + list(APPEND qjs_defines _TVOS) +endif() +if(WATCHOS) + list(APPEND qjs_defines _WATCHOS) +endif() list(APPEND qjs_libs ${CMAKE_DL_LIBS}) find_package(Threads) if(NOT CMAKE_SYSTEM_NAME STREQUAL "WASI") @@ -416,29 +433,29 @@ endif() # Install target # -if(NOT IOS) - file(STRINGS quickjs.h quickjs_h REGEX QJS_VERSION) - string(REGEX MATCH "QJS_VERSION_MAJOR ([0-9]*)" _ "${quickjs_h}") - set(QJS_VERSION_MAJOR ${CMAKE_MATCH_1}) - string(REGEX MATCH "QJS_VERSION_MINOR ([0-9]*)" _ "${quickjs_h}") - set(QJS_VERSION_MINOR ${CMAKE_MATCH_1}) - string(REGEX MATCH "QJS_VERSION_PATCH ([0-9]*)" _ "${quickjs_h}") - set(QJS_VERSION_PATCH ${CMAKE_MATCH_1}) - set_target_properties(qjs PROPERTIES - VERSION ${QJS_VERSION_MAJOR}.${QJS_VERSION_MINOR}.${QJS_VERSION_PATCH} - SOVERSION ${QJS_VERSION_MAJOR} - ) - install(FILES quickjs.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) - if(QJS_BUILD_LIBC) - install(FILES quickjs-libc.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) - endif() +file(STRINGS quickjs.h quickjs_h REGEX QJS_VERSION) +string(REGEX MATCH "QJS_VERSION_MAJOR ([0-9]*)" _ "${quickjs_h}") +set(QJS_VERSION_MAJOR ${CMAKE_MATCH_1}) +string(REGEX MATCH "QJS_VERSION_MINOR ([0-9]*)" _ "${quickjs_h}") +set(QJS_VERSION_MINOR ${CMAKE_MATCH_1}) +string(REGEX MATCH "QJS_VERSION_PATCH ([0-9]*)" _ "${quickjs_h}") +set(QJS_VERSION_PATCH ${CMAKE_MATCH_1}) +set_target_properties(qjs PROPERTIES + VERSION ${QJS_VERSION_MAJOR}.${QJS_VERSION_MINOR}.${QJS_VERSION_PATCH} + SOVERSION ${QJS_VERSION_MAJOR} +) +install(FILES quickjs.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +if(QJS_BUILD_LIBC) + install(FILES quickjs-libc.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +endif() +if(NOT IOS AND NOT TVOS AND NOT WATCHOS) install(TARGETS qjs_exe RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install(TARGETS qjsc RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - install(TARGETS qjs EXPORT qjsConfig - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - install(EXPORT qjsConfig DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/quickjs) - install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR}) - install(DIRECTORY examples DESTINATION ${CMAKE_INSTALL_DOCDIR}) endif() +install(TARGETS qjs EXPORT qjsConfig + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +install(EXPORT qjsConfig DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/quickjs) +install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR}) +install(DIRECTORY examples DESTINATION ${CMAKE_INSTALL_DOCDIR}) diff --git a/quickjs-libc.c b/quickjs-libc.c index 9e88e32cd..2c7ac7704 100644 --- a/quickjs-libc.c +++ b/quickjs-libc.c @@ -69,6 +69,7 @@ #if defined(__APPLE__) typedef sig_t sighandler_t; #include +#include #define environ (*_NSGetEnviron()) #endif @@ -3114,7 +3115,7 @@ static JSValue js_os_realpath(JSContext *ctx, JSValueConst this_val, } #endif -#if !defined(_WIN32) && !defined(__wasi__) +#if !defined(_WIN32) && !defined(__wasi__) && !(defined(__APPLE__) && (TARGET_OS_TV || TARGET_OS_WATCH)) static JSValue js_os_symlink(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { @@ -4173,7 +4174,7 @@ static const JSCFunctionListEntry js_os_funcs[] = { #if !defined(__wasi__) JS_CFUNC_DEF("realpath", 1, js_os_realpath ), #endif -#if !defined(_WIN32) && !defined(__wasi__) +#if !defined(_WIN32) && !defined(__wasi__) && !(defined(__APPLE__) && (TARGET_OS_TV || TARGET_OS_WATCH)) JS_CFUNC_MAGIC_DEF("lstat", 1, js_os_stat, 1 ), JS_CFUNC_DEF("symlink", 2, js_os_symlink ), JS_CFUNC_DEF("readlink", 1, js_os_readlink ),