aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuild.sh18
-rw-r--r--src/lpm.c39
-rw-r--r--src/lpm.lua2
3 files changed, 43 insertions, 16 deletions
diff --git a/build.sh b/build.sh
index 64eca82..329ac9f 100755
--- a/build.sh
+++ b/build.sh
@@ -8,9 +8,10 @@
SRCS="src/*.c"
CFLAGS="$CFLAGS -Ilib/prefix/include"
-LDFLAGS="$LDFLAGS -lm -static-libgcc -Llib/prefix/lib"
+LDFLAGS="$LDFLAGS -lm -Llib/prefix/lib"
[[ "$@" == "clean" ]] && rm -rf lib/libgit2/build lib/zlib/build lib/libzip/build lib/mbedtls-2.27.0/build lib/prefix lua $BIN *.exe src/lpm.luac src/lpm.lua.c && exit 0
+cmake --version >/dev/null && [[ "$?" != 0 ]] && echo "Please ensure that you have cmake installed." && exit -1
# Build supporting libraries, libz, libmbedtls, libmbedcrypto, libgit2, libzip, libmicrotar, liblua
CMAKE_DEFAULT_FLAGS=" $CMAKE_DEFAULT_FLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=`pwd`/lib/prefix -DCMAKE_INSTALL_PREFIX=`pwd`/lib/prefix -DBUILD_SHARED_LIBS=OFF"
@@ -18,19 +19,19 @@ mkdir -p lib/prefix/include lib/prefix/lib
if [[ "$@" != *"-lz"* ]]; then
[ ! -e "lib/zlib" ] && echo "Make sure you've cloned submodules. (git submodule update --init --depth=1)" && exit -1
[[ ! -e "lib/zlib/build" && $OSTYPE != 'msys'* ]] && cd lib/zlib && mkdir build && cd build && $CC -D_LARGEFILE64_SOURCE -I.. ../*.c -c && ar rc libz.a *.o && cp libz.a ../../prefix/lib && cp ../*.h ../../prefix/include && cd ../../../
- LDFLAGS="$LDFLAGS -l:libz.a"
+ LDFLAGS="$LDFLAGS -lz"
fi
if [[ "$@" != *"-lmbedtls"* && "$@" != *"-lmbedcrypto"* ]]; then
- [ ! -e "lib/mbedtls-2.27.0/build" ] && cd lib/mbedtls-2.27.0 && mkdir build && cd build && CFLAGS="-DMBEDTLS_MD4_C=1" cmake .. $CMAKE_DEFAULT_FLAGS -G "Unix Makefiles" -DENABLE_TESTING=OFF -DENABLE_PROGRAMS=OFF $SSL_CONFIGURE && CFLAGS="-DMBEDTLS_MD4_C=1" $MAKE -j $JOBS && $MAKE install && cd ../../../
- LDFLAGS="$LDFLAGS -l:libmbedtls.a -l:libmbedx509.a -l:libmbedcrypto.a"
+ [ ! -e "lib/mbedtls-2.27.0/build" ] && cd lib/mbedtls-2.27.0 && mkdir build && cd build && CFLAGS="-DMBEDTLS_MD4_C=1 -w" cmake .. $CMAKE_DEFAULT_FLAGS -G "Unix Makefiles" -DENABLE_TESTING=OFF -DENABLE_PROGRAMS=OFF $SSL_CONFIGURE && CFLAGS="-DMBEDTLS_MD4_C=1 -w" $MAKE -j $JOBS && $MAKE install && cd ../../../
+ LDFLAGS="$LDFLAGS -lmbedtls -lmbedx509 -lmbedcrypto"
fi
if [[ "$@" != *"-lgit2"* ]]; then
[ ! -e "lib/libgit2/build" ] && cd lib/libgit2 && mkdir build && cd build && cmake .. -G "Unix Makefiles" $GIT2_CONFIGURE $CMAKE_DEFAULT_FLAGS -DBUILD_TESTS=OFF -DBUILD_CLI=OFF -DREGEX_BACKEND=builtin -DUSE_SSH=OFF -DUSE_HTTPS=mbedTLS && $MAKE -j $JOBS && $MAKE install && cd ../../../
- LDFLAGS="-l:libgit2.a $LDFLAGS"
+ LDFLAGS="-lgit2 $LDFLAGS"
fi
if [[ "$@" != *"-lzip"* ]]; then
[ ! -e "lib/libzip/build" ] && cd lib/libzip && mkdir build && cd build && cmake .. -G "Unix Makefiles" $CMAKE_DEFAULT_FLAGS -DBUILD_TOOLS=OFF -DBUILD_EXAMPLES=OFF -DBUILD_DOC=OFF -DENABLE_COMMONCRYPTO=OFF -DENABLE_GNUTLS=OFF -DENABLE_OPENSSL=OFF -DENABLE_BZIP2=OFF -DENABLE_LZMA=OFF -DENABLE_ZSTD=OFF && $MAKE -j $JOBS && $MAKE install && cd ../../../
- LDFLAGS="$LDFLAGS -l:libzip.a"
+ LDFLAGS="$LDFLAGS -lzip"
fi
[[ "$@" != *"-lmicrotar"* ]] && CFLAGS="$CFLAGS -Ilib/microtar/src" && SRCS="$SRCS lib/microtar/src/microtar.c"
[[ "$@" != *"-llua"* ]] && CFLAGS="$CFLAGS -Ilib/lua -DMAKE_LIB=1" && SRCS="$SRCS lib/lua/onelua.c"
@@ -42,8 +43,9 @@ if [[ "$@" == *"-DLPM_STATIC"* ]]; then
xxd -i src/lpm.luac > src/lpm.lua.c
fi
-[[ $OSTYPE != 'msys'* && $CC != *'mingw'* && $CC != "emcc" ]] && LDFLAGS=" $LDFLAGS -ldl"
-[[ $OSTYPE == 'msys'* || $CC == *'mingw'* ]] && LDFLAGS="$LDFLAGS -lbcrypt -lws2_32 -lz -lwinhttp -lole32 -lcrypt32 -lrpcrt4"
+[[ $OSTYPE != 'msys'* && $CC != *'mingw'* && $CC != "emcc" ]] && LDFLAGS="$LDFLAGS -ldl"
+[[ $OSTYPE == 'msys'* || $CC == *'mingw'* ]] && LDFLAGS="$LDFLAGS -lbcrypt -lws2_32 -lz -lwinhttp -lole32 -lcrypt32 -lrpcrt4"
+[[ $OSTYPE == *'darwin'* ]] && LDFLAGS="$LDFLAGS -liconv -framework Security"
[[ " $@" != *" -g"* && " $@" != *" -O"* ]] && CFLAGS="$CFLAGS -O3" && LDFLAGS="$LDFLAGS -s"
$CC $CFLAGS $SRCS $@ -o $BIN $LDFLAGS
diff --git a/src/lpm.c b/src/lpm.c
index 79549bf..c8c7a76 100644
--- a/src/lpm.c
+++ b/src/lpm.c
@@ -37,6 +37,10 @@
#include <microtar.h>
#include <zip.h>
+#ifdef __APPLE__
+ #include <Security/Security.h>
+#endif
+
static char hex_digits[] = "0123456789abcdef";
static int lpm_hash(lua_State* L) {
size_t len;
@@ -457,8 +461,24 @@ static int lpm_certs(lua_State* L) {
}
fclose(file);
CertCloseStore(hSystemStore, 0);
+ #elseif __APPLE__ // https://developer.apple.com/forums/thread/691009
+ CFStringRef keys[] = { kSecClass, kSecMatchLimit, kSecReturnRef };
+ CFTypeRef values[] = { kSecClassCertificate, kSecMatchLimitAll, kCFBooleanTrue };
+ CFDictionaryRef query = CFDictionaryCreate(
+ NULL,
+ (const void **) keys,
+ values,
+ sizeof(keys) / sizeof(keys[0]),
+ &kCFTypeDictionaryKeyCallBacks,
+ &kCFTypeDictionaryValueCallBacks
+ );
+ CFTypeRef copyResult = NULL;
+ OSStatus err = SecItemCopyMatching(query, &copyResult);
+ if (err == errSecSuccess) {
+ CFShow(copyResult);
+ }
#else
- return luaL_error(L, "can't use system certificates on non-windows");
+ return luaL_error(L, "can't use system certificates on windows or mac");
#endif
}
git_libgit2_opts(GIT_OPT_SET_SSL_CERT_LOCATIONS, path, NULL);
@@ -827,12 +847,16 @@ static const luaL_Reg system_lib[] = {
#endif
-#ifndef LITE_ARCH_TUPLE
+#ifndef ARCH_PROCESSOR
#if __x86_64__ || _WIN64 || __MINGW64__
#define ARCH_PROCESSOR "x86_64"
- #else
+ #elif __i386__
#define ARCH_PROCESSOR "x86"
+ #else
+ #error "Please define -DARCH_PROCESSOR."
#endif
+#endif
+#ifndef ARCH_PLATFORM
#if _WIN32
#define ARCH_PLATFORM "windows"
#elif __linux__
@@ -840,8 +864,10 @@ static const luaL_Reg system_lib[] = {
#elif __APPLE__
#define ARCH_PLATFORM "darwin"
#else
- #error "Please define -DLITE_ARCH_TUPLE."
+ #error "Please define -DARCH_PLATFORM."
#endif
+#endif
+#ifndef LITE_ARCH_TUPLE
#define LITE_ARCH_TUPLE ARCH_PROCESSOR "-" ARCH_PLATFORM
#endif
@@ -865,15 +891,14 @@ int main(int argc, char* argv[]) {
lua_setglobal(L, "ARGV");
lua_pushliteral(L, LPM_VERSION);
lua_setglobal(L, "VERSION");
+ lua_pushliteral(L, ARCH_PLATFORM);
+ lua_setglobal(L, "PLATFORM");
#if _WIN32
- lua_pushliteral(L, "windows");
lua_pushliteral(L, "\\");
#else
- lua_pushliteral(L, "posix");
lua_pushliteral(L, "/");
#endif
lua_setglobal(L, "PATHSEP");
- lua_setglobal(L, "PLATFORM");
lua_pushliteral(L, LITE_ARCH_TUPLE);
lua_setglobal(L, "ARCH");
#ifndef LPM_STATIC
diff --git a/src/lpm.lua b/src/lpm.lua
index a7f0401..f6bf3cf 100644
--- a/src/lpm.lua
+++ b/src/lpm.lua
@@ -1670,7 +1670,7 @@ in any circumstance unless explicitly supplied.
"/etc/openssl/certs", -- NetBSD
"/var/ssl/certs", -- AIX
}
- if PLATFORM == "windows" then
+ if PLATFORM == "windows" or PLATFORM == "darwin" then
common.mkdirp(TMPDIR)
system.certs("system", TMPDIR .. PATHSEP .. "certs.crt")
else