From 214a2d97740a616197463b2344fffedf7875d8bf Mon Sep 17 00:00:00 2001 From: David Roberts Date: Tue, 1 Oct 2019 17:11:16 +0100 Subject: [PATCH 1/2] [6.8][ML] Make the ML native code more ".app"-like on macOS Successful notarization and acceptance by Gatekeeper on macOS Catalina requires that the ML programs and dynamic libraries be arranged into the directory structure used by macOS apps. Backport of #593 --- 3rd_party/3rd_party.sh | 119 +++++++--------------- bin/autoconfig/Makefile | 2 +- bin/autodetect/Makefile | 2 +- bin/categorize/Makefile | 2 +- bin/controller/Makefile | 9 +- bin/normalize/Makefile | 2 +- dev-tools/strip_binaries.sh | 87 ++++++++++------ devbin/analyze_test/Makefile | 2 +- docs/CHANGELOG.asciidoc | 7 ++ include/core/CLogger.h | 9 +- include/core/CResourceLocator.h | 3 - lib/core/CLogger.cc | 10 +- lib/core/CResourceLocator.cc | 40 +++----- lib/core/Makefile | 2 +- lib/core/log4cxx.properties | 15 ++- lib/core/unittest/CResourceLocatorTest.cc | 10 -- lib/core/unittest/CResourceLocatorTest.h | 1 - mk/defines.mk | 5 - mk/dynamiclib.mk | 2 +- mk/linux.mk | 20 ++-- mk/linux_crosscompile_macosx.mk | 24 +++-- mk/macosx.mk | 26 +++-- mk/make_info_plist.sh | 37 +++++++ mk/rules.mk | 7 +- mk/staticlib.mk | 2 +- mk/stdapp.mk | 10 +- mk/stdcpptest.mk | 2 +- mk/stddevapp.mk | 6 +- mk/windows.mk | 22 ++-- set_env.sh | 27 ++--- 30 files changed, 258 insertions(+), 254 deletions(-) create mode 100755 mk/make_info_plist.sh diff --git a/3rd_party/3rd_party.sh b/3rd_party/3rd_party.sh index e6db6e52ad..9dc6dcc1a3 100755 --- a/3rd_party/3rd_party.sh +++ b/3rd_party/3rd_party.sh @@ -52,67 +52,44 @@ case `uname` in Linux) if [ -z "$CPP_CROSS_COMPILE" ] ; then - ldd --version 2>&1 | grep musl > /dev/null - if [ $? -ne 0 ] ; then - APR_LOCATION=/usr/local/gcc62/lib - APR_EXTENSION=1.so.0 - BOOST_LOCATION=/usr/local/gcc62/lib - BOOST_COMPILER=gcc - BOOST_EXTENSION=mt-1_65_1.so.1.65.1 - BOOST_LIBRARIES='date_time filesystem iostreams program_options regex system thread' - LOG4CXX_LOCATION=/usr/local/gcc62/lib - LOG4CXX_EXTENSION=.so.10 - XML_LOCATION=/usr/local/gcc62/lib - XML_EXTENSION=.so.2 - # Ship the version of expat that came with the apr-util library - EXPAT_LOCATION=/usr/local/gcc62/lib - EXPAT_EXTENSION=.so.0 - GCC_RT_LOCATION=/usr/local/gcc62/lib64 - GCC_RT_EXTENSION=.so.1 - STL_LOCATION=/usr/local/gcc62/lib64 - STL_PREFIX=libstdc++ - STL_EXTENSION=.so.6 - ATOMIC_LOCATION= - ZLIB_LOCATION= - else - APR_LOCATION=/usr/local/lib - APR_EXTENSION=1.so.0 - BOOST_LOCATION=/usr/local/lib - BOOST_COMPILER=gcc - BOOST_EXTENSION=mt-1_65_1.so.1.65.1 - BOOST_LIBRARIES='date_time filesystem iostreams program_options regex system thread' - LOG4CXX_LOCATION=/usr/local/lib - LOG4CXX_EXTENSION=.so.10 - XML_LOCATION=/usr/local/lib - XML_EXTENSION=.so.2 - # Ship the version of expat that came with the apr-util library - EXPAT_LOCATION=/usr/local/lib - EXPAT_EXTENSION=.so.0 - GCC_RT_LOCATION= - STL_LOCATION= - ATOMIC_LOCATION= - ZLIB_LOCATION= - fi + APR_LOCATION=/usr/local/gcc62/lib + APR_EXTENSION=1.so.0 + BOOST_LOCATION=/usr/local/gcc62/lib + BOOST_COMPILER=gcc + BOOST_EXTENSION=mt-1_65_1.so.1.65.1 + BOOST_LIBRARIES='date_time filesystem iostreams program_options regex system thread' + LOG4CXX_LOCATION=/usr/local/gcc62/lib + LOG4CXX_EXTENSION=.so.10 + XML_LOCATION=/usr/local/gcc62/lib + XML_EXTENSION=.so.2 + # Ship the version of expat that came with the apr-util library + EXPAT_LOCATION=/usr/local/gcc62/lib + EXPAT_EXTENSION=.so.0 + GCC_RT_LOCATION=/usr/local/gcc62/lib64 + GCC_RT_EXTENSION=.so.1 + STL_LOCATION=/usr/local/gcc62/lib64 + STL_PREFIX=libstdc++ + STL_EXTENSION=.so.6 + ATOMIC_LOCATION= + ZLIB_LOCATION= + elif [ "$CPP_CROSS_COMPILE" = macosx ] ; then + SYSROOT=/usr/local/sysroot-x86_64-apple-macosx10.10 + APR_LOCATION= + BOOST_LOCATION=$SYSROOT/usr/local/lib + BOOST_COMPILER=clang + BOOST_EXTENSION=mt-1_65_1.dylib + BOOST_LIBRARIES='date_time filesystem iostreams program_options regex system thread' + LOG4CXX_LOCATION=$SYSROOT/usr/local/lib + LOG4CXX_EXTENSION=.10.dylib + XML_LOCATION= + EXPAT_LOCATION= + GCC_RT_LOCATION= + STL_LOCATION= + ATOMIC_LOCATION= + ZLIB_LOCATION= else - if [ "$CPP_CROSS_COMPILE" = macosx ] ; then - SYSROOT=/usr/local/sysroot-x86_64-apple-macosx10.10 - APR_LOCATION= - BOOST_LOCATION=$SYSROOT/usr/local/lib - BOOST_COMPILER=clang - BOOST_EXTENSION=mt-1_65_1.dylib - BOOST_LIBRARIES='date_time filesystem iostreams program_options regex system thread' - LOG4CXX_LOCATION=$SYSROOT/usr/local/lib - LOG4CXX_EXTENSION=.10.dylib - XML_LOCATION= - EXPAT_LOCATION= - GCC_RT_LOCATION= - STL_LOCATION= - ATOMIC_LOCATION= - ZLIB_LOCATION= - else - echo "Cannot cross compile to $CPP_CROSS_COMPILE" - exit 3 - fi + echo "Cannot cross compile to $CPP_CROSS_COMPILE" + exit 3 fi ;; @@ -293,27 +270,5 @@ case `uname` in fi ;; - SunOS) - if [ -n "$INSTALL_DIR" ] ; then - cd "$INSTALL_DIR" - for FILE in `find . -type f | egrep -v '^core|-debug$|libMl'` - do - # Replace RPATH for 3rd party libraries that already have one - elfedit -r -e 'dyn:runpath' $FILE >/dev/null 2>&1 && chmod u+wx $FILE && elfedit -e 'dyn:runpath $ORIGIN/.' $FILE - if [ $? -eq 0 ] ; then - echo "Set RPATH in $FILE" - else - # Set RPATH for 3rd party libraries that reference other libraries we ship - ldd $FILE | grep /usr/local/lib >/dev/null 2>&1 && chmod u+wx $FILE && elfedit -e 'dyn:runpath $ORIGIN/.' $FILE - if [ $? -eq 0 ] ; then - echo "Set RPATH in $FILE" - else - echo "Did not set RPATH in $FILE" - fi - fi - done - fi - ;; - esac diff --git a/bin/autoconfig/Makefile b/bin/autoconfig/Makefile index 9740197d67..c01e987dae 100644 --- a/bin/autoconfig/Makefile +++ b/bin/autoconfig/Makefile @@ -7,7 +7,7 @@ include $(CPP_SRC_HOME)/mk/defines.mk TARGET=$(OBJS_DIR)/autoconfig$(EXE_EXT) -INSTALL_DIR=$(CPP_PLATFORM_HOME)/bin +INSTALL_DIR=$(CPP_PLATFORM_HOME)/$(EXE_DIR) ML_LIBS=$(LIB_ML_CORE) $(LIB_ML_MATHS) $(LIB_ML_MODEL) $(LIB_ML_API) $(LIB_ML_CONFIG) diff --git a/bin/autodetect/Makefile b/bin/autodetect/Makefile index a4051da9cd..0150537ba6 100644 --- a/bin/autodetect/Makefile +++ b/bin/autodetect/Makefile @@ -7,7 +7,7 @@ include $(CPP_SRC_HOME)/mk/defines.mk TARGET=$(OBJS_DIR)/autodetect$(EXE_EXT) -INSTALL_DIR=$(CPP_PLATFORM_HOME)/bin +INSTALL_DIR=$(CPP_PLATFORM_HOME)/$(EXE_DIR) ML_LIBS=$(LIB_ML_CORE) $(LIB_ML_MATHS) $(LIB_ML_MODEL) $(LIB_ML_API) diff --git a/bin/categorize/Makefile b/bin/categorize/Makefile index 692ee5ce12..e1fdbeac86 100644 --- a/bin/categorize/Makefile +++ b/bin/categorize/Makefile @@ -7,7 +7,7 @@ include $(CPP_SRC_HOME)/mk/defines.mk TARGET=$(OBJS_DIR)/categorize$(EXE_EXT) -INSTALL_DIR=$(CPP_PLATFORM_HOME)/bin +INSTALL_DIR=$(CPP_PLATFORM_HOME)/$(EXE_DIR) ML_LIBS=$(LIB_ML_CORE) $(LIB_ML_MATHS) $(LIB_ML_MODEL) $(LIB_ML_API) diff --git a/bin/controller/Makefile b/bin/controller/Makefile index f12718ba02..758fa8ce07 100644 --- a/bin/controller/Makefile +++ b/bin/controller/Makefile @@ -7,7 +7,7 @@ include $(CPP_SRC_HOME)/mk/defines.mk TARGET=$(OBJS_DIR)/controller$(EXE_EXT) -INSTALL_DIR=$(CPP_PLATFORM_HOME)/bin +INSTALL_DIR=$(CPP_PLATFORM_HOME)/$(EXE_DIR) ML_LIBS=$(LIB_ML_CORE) @@ -16,7 +16,7 @@ USE_BOOST_PROGRAMOPTIONS_LIBS=1 LIBS=$(ML_LIBS) -all: build +all:: build SRCS= \ Main.cc \ @@ -24,6 +24,11 @@ SRCS= \ CCmdLineParser.cc \ CCommandProcessor.cc \ +ifneq ($(PLIST_FILE),) +all:: $(CPP_SRC_HOME)/gradle.properties $(CPP_SRC_HOME)/mk/make_info_plist.sh + $(MKDIR) $(INSTALL_DIR) + $(CPP_SRC_HOME)/mk/make_info_plist.sh "$(ML_APP_NAME)" true > $(INSTALL_DIR)/../$(notdir $(PLIST_FILE)) +endif include $(CPP_SRC_HOME)/mk/stdapp.mk diff --git a/bin/normalize/Makefile b/bin/normalize/Makefile index dae92c89b2..7480eddf7b 100644 --- a/bin/normalize/Makefile +++ b/bin/normalize/Makefile @@ -7,7 +7,7 @@ include $(CPP_SRC_HOME)/mk/defines.mk TARGET=$(OBJS_DIR)/normalize$(EXE_EXT) -INSTALL_DIR=$(CPP_PLATFORM_HOME)/bin +INSTALL_DIR=$(CPP_PLATFORM_HOME)/$(EXE_DIR) ML_LIBS=$(LIB_ML_CORE) $(LIB_ML_MATHS) $(LIB_ML_MODEL) $(LIB_ML_API) diff --git a/dev-tools/strip_binaries.sh b/dev-tools/strip_binaries.sh index 4850cd9588..ce9bac45cc 100755 --- a/dev-tools/strip_binaries.sh +++ b/dev-tools/strip_binaries.sh @@ -5,24 +5,47 @@ # you may not use this file except in compliance with the Elastic License. # -# Strips Ml native code binaries to make them smaller before distribution. +# Strips ML native code binaries to make them smaller before distribution. + +ML_APP_NAME=controller +case `uname` in + + Darwin) + EXE_DIR="$ML_APP_NAME.app/Contents/MacOS" + DYNAMIC_LIB_DIR="$ML_APP_NAME.app/Contents/lib" + ;; + + Linux) + if [ -z "$CPP_CROSS_COMPILE" ] ; then + EXE_DIR=bin + DYNAMIC_LIB_DIR=lib + elif [ "$CPP_CROSS_COMPILE" = macosx ] ; then + EXE_DIR="$ML_APP_NAME.app/Contents/MacOS" + DYNAMIC_LIB_DIR="$ML_APP_NAME.app/Contents/lib" + else + echo "Cannot cross compile to $CPP_CROSS_COMPILE" + exit 1 + fi + ;; + +esac # Ensure $CPP_PLATFORM_HOME is set if [ -z "$CPP_PLATFORM_HOME" ] ; then echo '$CPP_PLATFORM_HOME is not set' - exit 1 + exit 2 fi -# Ensure the bin folder has been created. -if [ ! -d "$CPP_PLATFORM_HOME/bin" ] ; then - echo '$CPP_PLATFORM_HOME/bin does not exist' - exit 2 +# Ensure the executable programs folder has been created. +if [ ! -d "$CPP_PLATFORM_HOME/$EXE_DIR" ] ; then + echo "$CPP_PLATFORM_HOME/$EXE_DIR does not exist" + exit 3 fi # Ensure the lib folder has been created. -if [ ! -d "$CPP_PLATFORM_HOME/lib" ] ; then - echo '$CPP_PLATFORM_HOME/lib does not exist' - exit 3 +if [ ! -d "$CPP_PLATFORM_HOME/$DYNAMIC_LIB_DIR" ] ; then + echo "$CPP_PLATFORM_HOME/$DYNAMIC_LIB_DIR does not exist" + exit 4 fi cd "$CPP_PLATFORM_HOME" @@ -32,13 +55,13 @@ cd "$CPP_PLATFORM_HOME" case `uname` in Darwin) - for PROGRAM in `ls -1d bin/* | grep -v '\.dSYM$'` + for PROGRAM in `ls -1d "$EXE_DIR"/* | grep -v '\.dSYM$'` do echo "Stripping $PROGRAM" dsymutil $PROGRAM strip -u -r $PROGRAM done - for LIBRARY in `ls -1d lib/* | grep -v '\.dSYM$'` + for LIBRARY in `ls -1d "$DYNAMIC_LIB_DIR"/* | grep -v '\.dSYM$'` do echo "Stripping $LIBRARY" case $LIBRARY in @@ -51,7 +74,7 @@ case `uname` in Linux) if [ -z "$CPP_CROSS_COMPILE" ] ; then - for PROGRAM in `ls -1 bin/* | egrep -v 'bin/core|-debug$'` + for PROGRAM in `ls -1 "$EXE_DIR"/* | egrep -v "$EXE_DIR"'/core|-debug$'` do echo "Stripping $PROGRAM" objcopy --only-keep-debug "$PROGRAM" "$PROGRAM-debug" @@ -59,34 +82,32 @@ case `uname` in objcopy --add-gnu-debuglink="$PROGRAM-debug" "$PROGRAM" chmod -x "$PROGRAM-debug" done - for LIBRARY in `ls -1 lib/* | egrep -v 'lib/core|-debug$'` + for LIBRARY in `ls -1 "$DYNAMIC_LIB_DIR"/* | egrep -v 'lib/core|-debug$'` do echo "Stripping $LIBRARY" objcopy --only-keep-debug "$LIBRARY" "$LIBRARY-debug" strip --strip-unneeded $LIBRARY objcopy --add-gnu-debuglink="$LIBRARY-debug" "$LIBRARY" done + elif [ "$CPP_CROSS_COMPILE" = macosx ] ; then + for PROGRAM in `ls -1d bin/* | grep -v '\.dSYM$'` + do + echo "Stripping $PROGRAM" + llvm-dsymutil-3.8 $PROGRAM + /usr/local/bin/x86_64-apple-macosx10.10-strip -u -r $PROGRAM + done + for LIBRARY in `ls -1d lib/* | grep -v '\.dSYM$'` + do + echo "Stripping $LIBRARY" + case $LIBRARY in + *Ml*) + llvm-dsymutil-3.8 $LIBRARY + esac + /usr/local/bin/x86_64-apple-macosx10.10-strip -x $LIBRARY + done else - if [ "$CPP_CROSS_COMPILE" = macosx ] ; then - for PROGRAM in `ls -1d bin/* | grep -v '\.dSYM$'` - do - echo "Stripping $PROGRAM" - llvm-dsymutil-3.8 $PROGRAM - /usr/local/bin/x86_64-apple-macosx10.10-strip -u -r $PROGRAM - done - for LIBRARY in `ls -1d lib/* | grep -v '\.dSYM$'` - do - echo "Stripping $LIBRARY" - case $LIBRARY in - *Ml*) - llvm-dsymutil-3.8 $LIBRARY - esac - /usr/local/bin/x86_64-apple-macosx10.10-strip -x $LIBRARY - done - else - echo "Cannot cross compile to $CPP_CROSS_COMPILE" - exit 4 - fi + echo "Cannot cross compile to $CPP_CROSS_COMPILE" + exit 5 fi ;; diff --git a/devbin/analyze_test/Makefile b/devbin/analyze_test/Makefile index 7fbf73917d..42a4f897c2 100644 --- a/devbin/analyze_test/Makefile +++ b/devbin/analyze_test/Makefile @@ -7,7 +7,7 @@ include $(CPP_SRC_HOME)/mk/defines.mk TARGET=analyze_test$(EXE_EXT) -INSTALL_DIR=$(CPP_PLATFORM_HOME)/devbin +INSTALL_DIR=$(CPP_PLATFORM_HOME)/$(EXE_DIR) all: build diff --git a/docs/CHANGELOG.asciidoc b/docs/CHANGELOG.asciidoc index 3ca6f28110..3ae6f4a457 100644 --- a/docs/CHANGELOG.asciidoc +++ b/docs/CHANGELOG.asciidoc @@ -28,6 +28,13 @@ //=== Regressions +== {es} version 6.8.5 + +=== Enhancements + +* The {ml} native processes are now arranged in a .app directory structure on + macOS, to allow for notarization on macOS Catalina. (See {ml-pull}593[#593].) + == {es} version 6.8.4 === Bug Fixes diff --git a/include/core/CLogger.h b/include/core/CLogger.h index 91aa2819e2..5215b2d07d 100644 --- a/include/core/CLogger.h +++ b/include/core/CLogger.h @@ -116,12 +116,11 @@ class CORE_EXPORT CLogger : private CNonCopyable { CLogger(); ~CLogger(); - //! Replace Ml specific patterns in log4cxx properties. In - //! addition to the patterns usually supported by log4cxx, Ml will + //! Replace ML specific patterns in log4cxx properties. In + //! addition to the patterns usually supported by log4cxx, ML will //! substitute: - //! 1) %D with the path to the Ml base log directory - //! 2) %N with the program's name - //! 3) %P with the program's process ID + //! 1) %N with the program's name + //! 2) %P with the program's process ID void massageProperties(log4cxx::helpers::Properties& props) const; using TLogCharLogStrMap = std::map; diff --git a/include/core/CResourceLocator.h b/include/core/CResourceLocator.h index 0e00f95042..5eb2dd0073 100644 --- a/include/core/CResourceLocator.h +++ b/include/core/CResourceLocator.h @@ -36,9 +36,6 @@ class CORE_EXPORT CResourceLocator : private CNonInstantiatable { //! details and dictionary words. static std::string resourceDir(); - //! Get the directory that stores log files. - static std::string logDir(); - //! Get the root directory for the C++ section of the source tree. //! (Obviously this should only be used in test code!) static std::string cppRootDir(); diff --git a/lib/core/CLogger.cc b/lib/core/CLogger.cc index 9e8fc20ba5..da323d9aa6 100644 --- a/lib/core/CLogger.cc +++ b/lib/core/CLogger.cc @@ -357,15 +357,11 @@ void CLogger::massageProperties(log4cxx::helpers::Properties& props) const { std::ostringstream pidStrm; pidStrm << CProcess::instance().id(); - // Set up Ml specific mappings - // 1) %D with the path to the Ml base log directory - // 2) %N with the program name - // 3) %P with the program's process ID + // Set up ML specific mappings + // 1) %N with the program name + // 2) %P with the program's process ID TLogCharLogStrMap mappings; log4cxx::LogString logStr; - log4cxx::helpers::Transcoder::decode(CResourceLocator::logDir(), logStr); - mappings.insert(TLogCharLogStrMap::value_type(static_cast('D'), logStr)); - logStr.clear(); log4cxx::helpers::Transcoder::decode(m_ProgramName, logStr); mappings.insert(TLogCharLogStrMap::value_type(static_cast('N'), logStr)); logStr.clear(); diff --git a/lib/core/CResourceLocator.cc b/lib/core/CResourceLocator.cc index 7c0530e8ee..52d6a1a923 100644 --- a/lib/core/CResourceLocator.cc +++ b/lib/core/CResourceLocator.cc @@ -8,28 +8,36 @@ #include #include -#include +#include namespace { -const char* const CPP_SRC_HOME("CPP_SRC_HOME"); +// Important: all file scope in this file must be simple types that don't +// require construction, as they could be accessed before the static +// constructors are run. +const char* const CPP_SRC_HOME{"CPP_SRC_HOME"}; + +#ifdef MacOSX +const char* const RESOURCE_RELATIVE_DIR{"../Resources"}; +#else +const char* const RESOURCE_RELATIVE_DIR{"../resources"}; +#endif } namespace ml { namespace core { std::string CResourceLocator::resourceDir() { - // Look relative to the program that's running, assuming this directory layout: - // $ES_HOME/plugin//resources - // $ES_HOME/plugin//platform//bin - std::string productionDir(CProgName::progDir() + "/../../../resources"); + // Look relative to the program that's running, assuming that the resource + // directory is located relative to the directory the current program is in. + std::string productionDir(CProgName::progDir() + '/' + RESOURCE_RELATIVE_DIR); // If the production directory doesn't exist, return the dev directory if // that does, but if neither exist return the production directory so the // error message is nicer for the end user. COsFileFuncs::TStat buf; if (COsFileFuncs::stat(productionDir.c_str(), &buf) != 0) { - const char* cppSrcHome(::getenv(CPP_SRC_HOME)); + const char* cppSrcHome(std::getenv(CPP_SRC_HOME)); if (cppSrcHome != nullptr) { std::string devDir(cppSrcHome); devDir += "/lib/core"; @@ -42,24 +50,8 @@ std::string CResourceLocator::resourceDir() { return productionDir; } -std::string CResourceLocator::logDir() { - // Look relative to the program that's running, assuming this directory layout: - // $ES_HOME/logs - // $ES_HOME/plugin//platform//bin - - std::string productionDir(CProgName::progDir() + "/../../../../../logs"); - - COsFileFuncs::TStat buf; - if (COsFileFuncs::stat(productionDir.c_str(), &buf) != 0) { - // Assume we're running as a unit test - return "."; - } - - return productionDir; -} - std::string CResourceLocator::cppRootDir() { - const char* cppSrcHome(::getenv(CPP_SRC_HOME)); + const char* cppSrcHome(std::getenv(CPP_SRC_HOME)); if (cppSrcHome == nullptr) { // Assume we're in a unittest directory return "../../.."; diff --git a/lib/core/Makefile b/lib/core/Makefile index efcbc9dc61..5ba2ecf779 100644 --- a/lib/core/Makefile +++ b/lib/core/Makefile @@ -19,7 +19,7 @@ USE_STRPTIME=1 CPPFLAGS+= -DDYNAMIC_LIB_EXT=$(DYNAMIC_LIB_EXT) -CONF_INSTALL_DIR=$(CPP_DISTRIBUTION_HOME)/resources +CONF_INSTALL_DIR=$(CPP_PLATFORM_HOME)/$(RESOURCES_DIR) # On Windows we need to copy over the Boost date/time config file that lists # details of each timezone, whereas on Unix timezone config is part of the diff --git a/lib/core/log4cxx.properties b/lib/core/log4cxx.properties index 4176142ed2..b14a6ecbb1 100644 --- a/lib/core/log4cxx.properties +++ b/lib/core/log4cxx.properties @@ -1,11 +1,11 @@ # Set root logger level to INFO and its only appender to A1. The root logger -# will never be used by Ml code once this config file has been read, so any +# will never be used by ML code once this config file has been read, so any # logging to the console will generally indicate something is not working # correctly. log4j.rootLogger=INFO, A1 # Also set up a logger named after the log identifier of the program, with -# appender A2. Ml programs should send all their messages to this logger +# appender A2. ML programs should send all their messages to this logger # once this config file has been read. If there is more than one appender, the # logger itself must have its level set to the lowest level to be output by any # of them, and then the individual appenders have separate thresholds to apply @@ -17,17 +17,16 @@ log4j.additivity.%N=false log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.Target=System.err -# A1 uses PatternLayout. %P is a Ml extension that is substituted with the +# A1 uses PatternLayout. %P is a ML extension that is substituted with the # the process ID. log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d %d{%Z} [%P] %-5p %F@%L %m%n -# A2 is set to log to a rolling file in a sub-directory of the Ml logs -# directory. %D and %N are Ml extensions to standard log4cxx. %D is -# replaced with the path to the Elasticsearch logs directory and %N with the -# name of the program. +# A2 is set to log to a rolling file in a sub-directory of the ML logs +# directory. %N is an ML extension to standard log4cxx that is replaced +# with the name of the program. log4j.appender.A2=org.apache.log4j.RollingFileAppender -log4j.appender.A2.File=%D/%N.log +log4j.appender.A2.File=%N.log log4j.appender.A2.MaxFileSize=1MB log4j.appender.A2.MaxBackupIndex=9 diff --git a/lib/core/unittest/CResourceLocatorTest.cc b/lib/core/unittest/CResourceLocatorTest.cc index a0abbf73ae..1cd00379ae 100644 --- a/lib/core/unittest/CResourceLocatorTest.cc +++ b/lib/core/unittest/CResourceLocatorTest.cc @@ -14,8 +14,6 @@ CppUnit::Test* CResourceLocatorTest::suite() { suiteOfTests->addTest(new CppUnit::TestCaller( "CResourceLocatorTest::testResourceDir", &CResourceLocatorTest::testResourceDir)); - suiteOfTests->addTest(new CppUnit::TestCaller( - "CResourceLocatorTest::testLogDir", &CResourceLocatorTest::testLogDir)); suiteOfTests->addTest(new CppUnit::TestCaller( "CResourceLocatorTest::testSrcRootDir", &CResourceLocatorTest::testSrcRootDir)); @@ -32,14 +30,6 @@ void CResourceLocatorTest::testResourceDir() { 0, ml::core::COsFileFuncs::stat((resourceDir + "/ml-en.dict").c_str(), &buf)); } -void CResourceLocatorTest::testLogDir() { - std::string logDir(ml::core::CResourceLocator::logDir()); - LOG_DEBUG(<< "Log directory is " << logDir); - - // Don't assert on this as it will be non-essential once - // we're an Elasticsearch plugin -} - void CResourceLocatorTest::testSrcRootDir() { std::string cppRootDir(ml::core::CResourceLocator::cppRootDir()); LOG_DEBUG(<< "C++ root directory is " << cppRootDir); diff --git a/lib/core/unittest/CResourceLocatorTest.h b/lib/core/unittest/CResourceLocatorTest.h index 38a48ff594..e32135387f 100644 --- a/lib/core/unittest/CResourceLocatorTest.h +++ b/lib/core/unittest/CResourceLocatorTest.h @@ -11,7 +11,6 @@ class CResourceLocatorTest : public CppUnit::TestFixture { public: void testResourceDir(); - void testLogDir(); void testSrcRootDir(); static CppUnit::Test* suite(); diff --git a/mk/defines.mk b/mk/defines.mk index 4cfa7ef7b1..f173463ee3 100644 --- a/mk/defines.mk +++ b/mk/defines.mk @@ -42,12 +42,7 @@ ifeq ($(OS),$(linuxOS)) ifdef CPP_CROSS_COMPILE include $(CPP_SRC_HOME)/mk/linux_crosscompile_$(CPP_CROSS_COMPILE).mk else -MUSL=$(shell ldd --version 2>&1 | grep musl) -ifeq ($(MUSL),) include $(CPP_SRC_HOME)/mk/linux.mk -else -include $(CPP_SRC_HOME)/mk/linux-musl.mk -endif endif endif diff --git a/mk/dynamiclib.mk b/mk/dynamiclib.mk index 75562ee34b..6dd40265ce 100644 --- a/mk/dynamiclib.mk +++ b/mk/dynamiclib.mk @@ -64,6 +64,6 @@ build: $(TARGET) $(MAKE) -f $(filter-out %.mk %.d,$(MAKEFILE_LIST)) install clean: - $(RM) $(OBJS_DIR)/*$(OBJECT_FILE_EXT) $(OBJS_DIR)/*.d* $(OBJS_DIR)/*.plist $(OBJS_DIR)/*.res $(APP_CLEAN) core core.* $(TARGET) $(IMPORT_LIB_NAME) $(basename $(TARGET)).pdb $(basename $(TARGET)).map $(basename $(TARGET)).exp + $(RM) $(OBJS_DIR)/*$(OBJECT_FILE_EXT) $(OBJS_DIR)/*.d* $(OBJS_DIR)/*.plist $(OBJS_DIR)/*.xml $(OBJS_DIR)/*.res $(APP_CLEAN) core core.* $(TARGET) $(IMPORT_LIB_NAME) $(basename $(TARGET)).pdb $(basename $(TARGET)).map $(basename $(TARGET)).exp +$(CLEAN_CMDS) $(RMDIR) results diff --git a/mk/linux.mk b/mk/linux.mk index aa51f789a1..78cf4c5bfd 100644 --- a/mk/linux.mk +++ b/mk/linux.mk @@ -32,6 +32,14 @@ CDEPFLAGS=-MM COMP_OUT_FLAG=-o LINK_OUT_FLAG=-o DEP_REFORMAT=sed 's,\($*\)\.o[ :]*,$(OBJS_DIR)\/\1.o $@ : ,g' +OBJECT_FILE_EXT=.o +EXE_DIR=bin +DYNAMIC_LIB_EXT=.so +DYNAMIC_LIB_DIR=lib +STATIC_LIB_EXT=.a +SHELL_SCRIPT_EXT=.sh +UT_TMP_DIR=/tmp/$(LOGNAME) +RESOURCES_DIR=resources LOCALLIBS=-lm -lpthread -ldl -lrt NETLIBS=-lnsl BOOSTVER=1_65_1 @@ -50,21 +58,15 @@ RAPIDJSONCPPFLAGS=-DRAPIDJSON_HAS_STDSTRING -DRAPIDJSON_SSE42 EIGENCPPFLAGS=-DEIGEN_MPL2_ONLY XMLINCLUDES=`/usr/local/gcc62/bin/xml2-config --cflags` XMLLIBS=`/usr/local/gcc62/bin/xml2-config --libs` -DYNAMICLIBLDFLAGS=$(PLATPICFLAGS) -shared -Wl,--as-needed -L$(CPP_PLATFORM_HOME)/lib $(COVERAGE) -Wl,-z,relro -Wl,-z,now -Wl,-rpath,'$$ORIGIN/.' +DYNAMICLIBLDFLAGS=$(PLATPICFLAGS) -shared -Wl,--as-needed -L$(CPP_PLATFORM_HOME)/$(DYNAMIC_LIB_DIR) $(COVERAGE) -Wl,-z,relro -Wl,-z,now -Wl,-rpath,'$$ORIGIN/.' JAVANATIVEINCLUDES=-I$(JAVA_HOME)/include JAVANATIVELDFLAGS=-L$(JAVA_HOME)/jre/lib/server JAVANATIVELIBS=-ljvm CPPUNITLIBS=-lcppunit LOG4CXXLIBS=-llog4cxx ZLIBLIBS=-lz -EXELDFLAGS=-pie $(PLATPIEFLAGS) -L$(CPP_PLATFORM_HOME)/lib $(COVERAGE) -Wl,-z,relro -Wl,-z,now -Wl,-rpath,'$$ORIGIN/../lib' -UTLDFLAGS=$(EXELDFLAGS) -Wl,-rpath,$(CPP_PLATFORM_HOME)/lib -OBJECT_FILE_EXT=.o -DYNAMIC_LIB_EXT=.so -DYNAMIC_LIB_DIR=lib -STATIC_LIB_EXT=.a -SHELL_SCRIPT_EXT=.sh -UT_TMP_DIR=/tmp/$(LOGNAME) +EXELDFLAGS=-pie $(PLATPIEFLAGS) -L$(CPP_PLATFORM_HOME)/$(DYNAMIC_LIB_DIR) $(COVERAGE) -Wl,-z,relro -Wl,-z,now -Wl,-rpath,'$$ORIGIN/../lib' +UTLDFLAGS=$(EXELDFLAGS) -Wl,-rpath,$(CPP_PLATFORM_HOME)/$(DYNAMIC_LIB_DIR) LIB_ML_CORE=-lMlCore LIB_ML_VER=-lMlVer ML_VER_LDFLAGS=-L$(CPP_SRC_HOME)/lib/ver/.objs diff --git a/mk/linux_crosscompile_macosx.mk b/mk/linux_crosscompile_macosx.mk index c2b34f2e81..b87ebe1008 100644 --- a/mk/linux_crosscompile_macosx.mk +++ b/mk/linux_crosscompile_macosx.mk @@ -7,6 +7,8 @@ OS=MacOSX CPP_PLATFORM_HOME=$(CPP_DISTRIBUTION_HOME)/platform/darwin-x86_64 +ML_APP_NAME=controller +APP_CONTENTS=$(ML_APP_NAME).app/Contents CROSS_TARGET_PLATFORM=x86_64-apple-macosx10.10 SYSROOT=/usr/local/sysroot-$(CROSS_TARGET_PLATFORM) @@ -36,6 +38,14 @@ COMP_OUT_FLAG=-o ANALYZE_OUT_FLAG=-o LINK_OUT_FLAG=-o DEP_REFORMAT=sed 's,\($*\)\.o[ :]*,$(OBJS_DIR)\/\1.o $@ : ,g' +OBJECT_FILE_EXT=.o +EXE_DIR=$(APP_CONTENTS)/MacOS +DYNAMIC_LIB_EXT=.dylib +DYNAMIC_LIB_DIR=$(APP_CONTENTS)/lib +STATIC_LIB_EXT=.a +SHELL_SCRIPT_EXT=.sh +UT_TMP_DIR=/tmp/$(LOGNAME) +RESOURCES_DIR=$(APP_CONTENTS)/Resources LOCALLIBS= NETLIBS= BOOSTVER=1_65_1 @@ -56,18 +66,14 @@ XMLINCLUDES=-isystem $(SYSROOT)/usr/include/libxml2 XMLLIBLDFLAGS=-L$(SYSROOT)/usr/lib XMLLIBS=-lxml2 ML_VERSION_NUM=$(shell cat $(CPP_SRC_HOME)/gradle.properties | grep '^elasticsearchVersion' | awk -F= '{ print $$2 }' | xargs echo | sed 's/-.*//') -DYNAMICLIBLDFLAGS=-current_version $(ML_VERSION_NUM) -compatibility_version $(ML_VERSION_NUM) -dynamiclib -Wl,-dead_strip_dylibs $(COVERAGE) -Wl,-install_name,@rpath/$(notdir $(TARGET)) -L$(CPP_PLATFORM_HOME)/lib -Wl,-rpath,@loader_path/. -Wl,-headerpad_max_install_names +DYNAMICLIBLDFLAGS=-current_version $(ML_VERSION_NUM) -compatibility_version $(ML_VERSION_NUM) -dynamiclib -Wl,-dead_strip_dylibs $(COVERAGE) -Wl,-install_name,@rpath/$(notdir $(TARGET)) -L$(CPP_PLATFORM_HOME)/$(DYNAMIC_LIB_DIR) -Wl,-rpath,@loader_path/. -Wl,-headerpad_max_install_names CPPUNITLIBS=-lcppunit LOG4CXXLIBS=-llog4cxx ZLIBLIBS=-lz -EXELDFLAGS=-bind_at_load -L$(CPP_PLATFORM_HOME)/lib $(COVERAGE) -Wl,-rpath,@loader_path/../lib -Wl,-headerpad_max_install_names -UTLDFLAGS=$(EXELDFLAGS) -Wl,-rpath,$(CPP_PLATFORM_HOME)/lib -OBJECT_FILE_EXT=.o -DYNAMIC_LIB_EXT=.dylib -DYNAMIC_LIB_DIR=lib -STATIC_LIB_EXT=.a -SHELL_SCRIPT_EXT=.sh -UT_TMP_DIR=/tmp/$(LOGNAME) +EXELDFLAGS=-bind_at_load -L$(CPP_PLATFORM_HOME)/$(DYNAMIC_LIB_DIR) $(COVERAGE) -Wl,-rpath,@loader_path/../lib -Wl,-headerpad_max_install_names +UTLDFLAGS=$(EXELDFLAGS) -Wl,-rpath,$(CPP_PLATFORM_HOME)/$(DYNAMIC_LIB_DIR) +PLIST_FILE=$(OBJS_DIR)/Info.plist +PLIST_FILE_LDFLAGS=-Wl,-sectcreate,__TEXT,__info_plist,$(PLIST_FILE) LIB_ML_API=-lMlApi LIB_ML_CORE=-lMlCore LIB_ML_VER=-lMlVer diff --git a/mk/macosx.mk b/mk/macosx.mk index eecd5c8b7d..306c4fac61 100644 --- a/mk/macosx.mk +++ b/mk/macosx.mk @@ -7,6 +7,8 @@ OS=MacOSX CPP_PLATFORM_HOME=$(CPP_DISTRIBUTION_HOME)/platform/darwin-x86_64 +ML_APP_NAME=controller +APP_CONTENTS=$(ML_APP_NAME).app/Contents CC=clang CXX=clang++ -std=c++11 -stdlib=libc++ @@ -33,6 +35,14 @@ COMP_OUT_FLAG=-o ANALYZE_OUT_FLAG=-o LINK_OUT_FLAG=-o DEP_REFORMAT=sed 's,\($*\)\.o[ :]*,$(OBJS_DIR)\/\1.o $@ : ,g' +OBJECT_FILE_EXT=.o +EXE_DIR=$(APP_CONTENTS)/MacOS +DYNAMIC_LIB_EXT=.dylib +DYNAMIC_LIB_DIR=$(APP_CONTENTS)/lib +STATIC_LIB_EXT=.a +SHELL_SCRIPT_EXT=.sh +UT_TMP_DIR=/tmp/$(LOGNAME) +RESOURCES_DIR=$(APP_CONTENTS)/Resources LOCALLIBS= NETLIBS= BOOSTVER=1_65_1 @@ -55,19 +65,15 @@ XMLLIBS=-lxml2 JAVANATIVEINCLUDES=-I`/usr/libexec/java_home`/include JAVANATIVELDFLAGS=-L`/usr/libexec/java_home`/jre/lib/server JAVANATIVELIBS=-ljvm -ML_VERSION_NUM=$(shell cat $(CPP_SRC_HOME)/gradle.properties | grep '^elasticsearchVersion' | awk -F= '{ print $$2 }' | xargs echo | sed 's/-.*//') -DYNAMICLIBLDFLAGS=-current_version $(ML_VERSION_NUM) -compatibility_version $(ML_VERSION_NUM) -dynamiclib -Wl,-dead_strip_dylibs $(COVERAGE) -Wl,-install_name,@rpath/$(notdir $(TARGET)) -L$(CPP_PLATFORM_HOME)/lib -Wl,-rpath,@loader_path/. -Wl,-headerpad_max_install_names +ML_VERSION_NUM:=$(shell cat $(CPP_SRC_HOME)/gradle.properties | grep '^elasticsearchVersion' | awk -F= '{ print $$2 }' | xargs echo | sed 's/-.*//') +DYNAMICLIBLDFLAGS=-current_version $(ML_VERSION_NUM) -compatibility_version $(ML_VERSION_NUM) -dynamiclib -Wl,-dead_strip_dylibs $(COVERAGE) -Wl,-install_name,@rpath/$(notdir $(TARGET)) -L$(CPP_PLATFORM_HOME)/$(DYNAMIC_LIB_DIR) -Wl,-rpath,@loader_path/. -Wl,-headerpad_max_install_names CPPUNITLIBS=-lcppunit LOG4CXXLIBS=-llog4cxx ZLIBLIBS=-lz -EXELDFLAGS=-bind_at_load -L$(CPP_PLATFORM_HOME)/lib $(COVERAGE) -Wl,-rpath,@loader_path/../lib -Wl,-headerpad_max_install_names -UTLDFLAGS=$(EXELDFLAGS) -Wl,-rpath,$(CPP_PLATFORM_HOME)/lib -OBJECT_FILE_EXT=.o -DYNAMIC_LIB_EXT=.dylib -DYNAMIC_LIB_DIR=lib -STATIC_LIB_EXT=.a -SHELL_SCRIPT_EXT=.sh -UT_TMP_DIR=/tmp/$(LOGNAME) +EXELDFLAGS=-bind_at_load -L$(CPP_PLATFORM_HOME)/$(DYNAMIC_LIB_DIR) $(COVERAGE) -Wl,-rpath,@loader_path/../lib -Wl,-headerpad_max_install_names +UTLDFLAGS=$(EXELDFLAGS) -Wl,-rpath,$(CPP_PLATFORM_HOME)/$(DYNAMIC_LIB_DIR) +PLIST_FILE=$(OBJS_DIR)/Info.plist +PLIST_FILE_LDFLAGS=-Wl,-sectcreate,__TEXT,__info_plist,$(PLIST_FILE) LIB_ML_API=-lMlApi LIB_ML_CORE=-lMlCore LIB_ML_VER=-lMlVer diff --git a/mk/make_info_plist.sh b/mk/make_info_plist.sh new file mode 100755 index 0000000000..79b0676ed0 --- /dev/null +++ b/mk/make_info_plist.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +ML_VERSION_NUM=`cat $CPP_SRC_HOME/gradle.properties | grep '^elasticsearchVersion' | awk -F= '{ print $2 }' | xargs echo | sed 's/-.*//'` +ML_APP_NAME=$1 + +cat < + + + + CFBundleDevelopmentRegion + English + CFBundlePackageType + APPL + CFBundleIdentifier + co.elastic.ml-cpp.$ML_APP_NAME + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $ML_APP_NAME + CFBundleDisplayName + $ML_APP_NAME + CFBundleVersion + $ML_VERSION_NUM +EOF + +if [ "x$2" = xtrue ] ; then + cat <CFBundleExecutable + $ML_APP_NAME +EOF +fi + +cat < + +EOF diff --git a/mk/rules.mk b/mk/rules.mk index fe7e390c7c..e4d0f36eed 100644 --- a/mk/rules.mk +++ b/mk/rules.mk @@ -36,7 +36,7 @@ OS_SRCS=$(PLATFORM_SRCS) endif OBJS:=$(OBJS) $(patsubst %.cc, $(OBJS_DIR)/%$(OBJECT_FILE_EXT), $(SRCS)) -ANALYZEOBJS:=$(ANALYZEOBJS) $(patsubst %.cc, $(OBJS_DIR)/%.plist, $(SRCS)) +ANALYZEOBJS:=$(ANALYZEOBJS) $(patsubst %.cc, $(OBJS_DIR)/%.xml, $(SRCS)) # define MAKE_PREFIX_SRC_PATH to prefix source file names with their path # leave undefined for normal behaviour @@ -47,7 +47,10 @@ $(OBJS_DIR)/%$(OBJECT_FILE_EXT): %.cc $(OBJS_DIR)/%$(OBJECT_FILE_EXT): %.c $(CC) -c $(COMP_OUT_FLAG)$@ $(CFLAGS) $(PICFLAGS) $(PDB_FLAGS) $(CPPFLAGS) $(if $(MAKE_PREFIX_SRC_PATH), $(shell pwd)/)$< -$(OBJS_DIR)/%.plist: %.cc +$(OBJS_DIR)/%.plist: $(CPP_SRC_HOME)/gradle.properties $(CPP_SRC_HOME)/mk/make_info_plist.sh + $(CPP_SRC_HOME)/mk/make_info_plist.sh "$(ML_APP_NAME)" false > $@ + +$(OBJS_DIR)/%.xml: %.cc $(CXX) $(ANALYZE_OUT_FLAG)$@ $(ANALYZEFLAGS) $(filter-out -DNDEBUG, $(CPPFLAGS)) $(if $(MAKE_PREFIX_SRC_PATH), $(shell pwd)/)$< # JOB_NAME will be set for builds kicked off by Jenkins, where dependency diff --git a/mk/staticlib.mk b/mk/staticlib.mk index 8e2658a88a..489b95f59b 100644 --- a/mk/staticlib.mk +++ b/mk/staticlib.mk @@ -33,5 +33,5 @@ install: build: $(TARGET) clean: - $(RM) $(OBJS_DIR)/*$(OBJECT_FILE_EXT) $(OBJS_DIR)/*.d* $(OBJS_DIR)/*.plist $(APP_CLEAN) core core.* $(TARGET) $(basename $(TARGET)).pdb + $(RM) $(OBJS_DIR)/*$(OBJECT_FILE_EXT) $(OBJS_DIR)/*.d* $(OBJS_DIR)/*.plist $(OBJS_DIR)/*.xml $(APP_CLEAN) core core.* $(TARGET) $(basename $(TARGET)).pdb +$(CLEAN_CMDS) diff --git a/mk/stdapp.mk b/mk/stdapp.mk index 93cfc802b0..f17449c619 100644 --- a/mk/stdapp.mk +++ b/mk/stdapp.mk @@ -11,12 +11,12 @@ PICFLAGS=$(PLATPIEFLAGS) LIBS:=$(LOCALLIBS) $(LIB_ML_VER) $(LIB_ML_SECCOMP) $(LIBS) ifndef INSTALL_DIR -INSTALL_DIR=$(CPP_PLATFORM_HOME)/bin +INSTALL_DIR=$(CPP_PLATFORM_HOME)/$(EXE_DIR) endif ifndef CONF_INSTALL_DIR ifdef TARGET_CONF -CONF_INSTALL_DIR=$(CPP_DISTRIBUTION_HOME)/resources +CONF_INSTALL_DIR=$(CPP_PLATFORM_HOME)/$(RESOURCES_DIR) endif endif @@ -28,8 +28,8 @@ ifdef TARGET_CONF #CONF_INSTALL_CMD=$(MKDIR) $(CONF_INSTALL_DIR); $(INSTALL) $(TARGET_CONF) $(CONF_INSTALL_DIR) endif -$(TARGET): $(OBJS) $(RESOURCE_FILE) - $(CXX) $(LINK_OUT_FLAG)$@ $(PDB_FLAGS) $(OBJS) $(RESOURCE_FILE) $(LDFLAGS) $(LIBS) +$(TARGET): $(OBJS) $(RESOURCE_FILE) $(PLIST_FILE) + $(CXX) $(LINK_OUT_FLAG)$@ $(PDB_FLAGS) $(OBJS) $(RESOURCE_FILE) $(LDFLAGS) $(PLIST_FILE_LDFLAGS) $(LIBS) test: +$(TEST_CMDS) @@ -58,7 +58,7 @@ build: $(TARGET) $(MAKE) -f $(filter-out %.mk %.d,$(MAKEFILE_LIST)) install clean: - $(RM) $(OBJS_DIR)/*$(OBJECT_FILE_EXT) $(OBJS_DIR)/*.d* $(OBJS_DIR)/*.plist $(OBJS_DIR)/*.res $(APP_CLEAN) core core.* $(TARGET) $(basename $(TARGET)).pdb $(basename $(TARGET)).map $(basename $(TARGET)).exp + $(RM) $(OBJS_DIR)/*$(OBJECT_FILE_EXT) $(OBJS_DIR)/*.d* $(OBJS_DIR)/*.plist $(OBJS_DIR)/*.xml $(OBJS_DIR)/*.res $(APP_CLEAN) core core.* $(TARGET) $(basename $(TARGET)).pdb $(basename $(TARGET)).map $(basename $(TARGET)).exp +$(CLEAN_CMDS) $(RMDIR) results diff --git a/mk/stdcpptest.mk b/mk/stdcpptest.mk index 8119344256..e7e563651e 100644 --- a/mk/stdcpptest.mk +++ b/mk/stdcpptest.mk @@ -24,7 +24,7 @@ $(TARGET): $(OBJS) $(RESOURCE_FILE) build: $(TARGET) clean: - $(RM) $(OBJS_DIR)/*$(OBJECT_FILE_EXT) $(OBJS_DIR)/*.d* $(OBJS_DIR)/*.plist $(OBJS_DIR)/*.res $(APP_CLEAN) core core.* $(TARGET) $(basename $(TARGET)).pdb $(basename $(TARGET)).map $(basename $(TARGET)).exp cppunit_results.xml + $(RM) $(OBJS_DIR)/*$(OBJECT_FILE_EXT) $(OBJS_DIR)/*.d* $(OBJS_DIR)/*.plist $(OBJS_DIR)/*.xml $(OBJS_DIR)/*.res $(APP_CLEAN) core core.* $(TARGET) $(basename $(TARGET)).pdb $(basename $(TARGET)).map $(basename $(TARGET)).exp cppunit_results.xml $(RMDIR) results $(RMDIR) data diff --git a/mk/stddevapp.mk b/mk/stddevapp.mk index 76994b635c..d351b4f731 100644 --- a/mk/stddevapp.mk +++ b/mk/stddevapp.mk @@ -12,8 +12,8 @@ LDFLAGS:=$(UTLDFLAGS) $(LDFLAGS) $(LIB_PATH) $(ML_VER_LDFLAGS) PICFLAGS=$(PLATPIEFLAGS) LIBS:=$(LOCALLIBS) $(LIB_ML_VER) $(LIBS) -$(TARGET): $(OBJS) $(RESOURCE_FILE) - $(CXX) $(LINK_OUT_FLAG)$@ $(PDB_FLAGS) $(OBJS) $(RESOURCE_FILE) $(LDFLAGS) $(LIBS) +$(TARGET): $(OBJS) $(RESOURCE_FILE) $(PLIST_FILE) + $(CXX) $(LINK_OUT_FLAG)$@ $(PDB_FLAGS) $(OBJS) $(RESOURCE_FILE) $(LDFLAGS) $(PLIST_FILE_LDFLAGS) $(LIBS) test: +$(TEST_CMDS) @@ -38,7 +38,7 @@ build: $(TARGET) $(MAKE) -f $(filter-out %.mk %.d,$(MAKEFILE_LIST)) install clean: - $(RM) $(OBJS_DIR)/*$(OBJECT_FILE_EXT) $(OBJS_DIR)/*.d* $(OBJS_DIR)/*.plist $(OBJS_DIR)/*.res $(APP_CLEAN) core core.* $(TARGET) $(basename $(TARGET)).pdb $(basename $(TARGET)).map $(basename $(TARGET)).exp + $(RM) $(OBJS_DIR)/*$(OBJECT_FILE_EXT) $(OBJS_DIR)/*.d* $(OBJS_DIR)/*.plist $(OBJS_DIR)/*.xml $(OBJS_DIR)/*.res $(APP_CLEAN) core core.* $(TARGET) $(basename $(TARGET)).pdb $(basename $(TARGET)).map $(basename $(TARGET)).exp +$(CLEAN_CMDS) $(RMDIR) results diff --git a/mk/windows.mk b/mk/windows.mk index a6d785e2f5..1e16b61eb0 100644 --- a/mk/windows.mk +++ b/mk/windows.mk @@ -56,6 +56,18 @@ AR_OUT_FLAG=-OUT: # do then we'll rebuild everything from scratch DEP_FILTER= 2>/dev/null | egrep "^.line .*(\\.h|$<)" | tr -s '\\\\' '/' | awk -F'"' '{ print $$2 }' | egrep -i -v "usr.local|$(LOCAL_DRIVE)..progra" | sed 's~/[a-z]*/\.\./~/~g' | sort -f -u | sort -t. -k2 | tr '\r\n\t' ' ' | sed 's/ / /g' | sed 's/^ //' | sed 's/ $$//' DEP_REFORMAT=sed 's,$<,$(basename $@)$(OBJECT_FILE_EXT) $@ : $<,' +OBJECT_FILE_EXT=.obj +EXE_EXT=.exe +EXE_DIR=bin +DYNAMIC_LIB_EXT=.dll +DYNAMIC_LIB_DIR=bin +IMPORT_LIB_DIR=lib +RESOURCE_FILE=$(OBJS_DIR)/ml.res +STATIC_LIB_EXT=.lib +SHELL_SCRIPT_EXT=.bat +# This temp directory assumes we're running in a Unix-like shell such as Git bash +UT_TMP_DIR=/tmp +RESOURCES_DIR=resources LOCALLIBS=AdvAPI32.lib shell32.lib Version.lib NETLIBS=WS2_32.lib BOOSTVER=1_65_1 @@ -83,16 +95,6 @@ ZLIBLIBS=zdll.lib STRPTIMELIBS=strptime.lib EXELDFLAGS=-nologo -Zi $(CRT_OPT) -link -MAP -OPT:REF -SUBSYSTEM:CONSOLE,6.1 -STACK:0x800000 -INCREMENTAL:NO -LIBPATH:$(CPP_PLATFORM_HOME)/$(IMPORT_LIB_DIR) UTLDFLAGS=$(EXELDFLAGS) -OBJECT_FILE_EXT=.obj -DYNAMIC_LIB_EXT=.dll -DYNAMIC_LIB_DIR=bin -IMPORT_LIB_DIR=lib -RESOURCE_FILE=$(OBJS_DIR)/ml.res -STATIC_LIB_EXT=.lib -SHELL_SCRIPT_EXT=.bat -# This temp directory assumes we're running in a Unix-like shell such as Git bash -UT_TMP_DIR=/tmp -EXE_EXT=.exe INSTALL=cp CP=cp RC=rc -nologo diff --git a/set_env.sh b/set_env.sh index cce2110062..f2e4cdaf99 100755 --- a/set_env.sh +++ b/set_env.sh @@ -23,26 +23,19 @@ export CPP_SRC_HOME=`cd "$MY_DIR" && pwd` case `uname` in Darwin) - SIMPLE_PLATFORM=macosx + SIMPLE_PLATFORM=macos BUNDLE_PLATFORM=darwin-x86_64 ;; Linux) - if ldd --version 2>&1 | grep musl > /dev/null ; then - SIMPLE_PLATFORM=linux-musl - BUNDLE_PLATFORM=linux-musl-x86_64 + SIMPLE_PLATFORM=linux + if [ -z "$CPP_CROSS_COMPILE" ] ; then + BUNDLE_PLATFORM=linux-x86_64 + elif [ "$CPP_CROSS_COMPILE" = macosx ] ; then + BUNDLE_PLATFORM=darwin-x86_64 else - SIMPLE_PLATFORM=linux - if [ -z "$CPP_CROSS_COMPILE" ] ; then - BUNDLE_PLATFORM=linux-x86_64 - else - if [ "$CPP_CROSS_COMPILE" = macosx ] ; then - BUNDLE_PLATFORM=darwin-x86_64 - else - echo "Cannot cross compile to $CPP_CROSS_COMPILE" - exit 1 - fi - fi + echo "Cannot cross compile to $CPP_CROSS_COMPILE" + exit 1 fi ;; @@ -102,7 +95,7 @@ case $SIMPLE_PLATFORM in PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin ;; - macosx) + macos) PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin ;; @@ -159,7 +152,7 @@ case $SIMPLE_PLATFORM in MAKE=`which make` ;; - macosx|windows) + macos|windows) MAKE=`which gnumake` ;; From 2c0aa1361787b5f7bc160f1c037fe73e841ea5a8 Mon Sep 17 00:00:00 2001 From: David Roberts Date: Fri, 1 Nov 2019 11:57:38 +0000 Subject: [PATCH 2/2] Fix mistake in backport --- dev-tools/strip_binaries.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-tools/strip_binaries.sh b/dev-tools/strip_binaries.sh index ce9bac45cc..a2ce5cefcf 100755 --- a/dev-tools/strip_binaries.sh +++ b/dev-tools/strip_binaries.sh @@ -90,13 +90,13 @@ case `uname` in objcopy --add-gnu-debuglink="$LIBRARY-debug" "$LIBRARY" done elif [ "$CPP_CROSS_COMPILE" = macosx ] ; then - for PROGRAM in `ls -1d bin/* | grep -v '\.dSYM$'` + for PROGRAM in `ls -1d "$EXE_DIR"/* | grep -v '\.dSYM$'` do echo "Stripping $PROGRAM" llvm-dsymutil-3.8 $PROGRAM /usr/local/bin/x86_64-apple-macosx10.10-strip -u -r $PROGRAM done - for LIBRARY in `ls -1d lib/* | grep -v '\.dSYM$'` + for LIBRARY in `ls -1d "$DYNAMIC_LIB_DIR"/* | grep -v '\.dSYM$'` do echo "Stripping $LIBRARY" case $LIBRARY in