diff --git a/.ci/conanfile.txt b/.ci/conanfile.txt new file mode 100644 index 00000000..e65959cc --- /dev/null +++ b/.ci/conanfile.txt @@ -0,0 +1,12 @@ +[requires] +boost/1.72.0 +icu/64.2 +eigen/3.3.7 + +[options] +boost:shared=True +boost:i18n_backend=icu +icu:with_dyload=False + +[generators] +cmake_find_package diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..f76b8512 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,42 @@ +language: cpp + +addons: + apt: + packages: + - python3 + - python3-pip + - python3-setuptools + - python3-wheel + +matrix: + include: + - os: linux + compiler: gcc + before_script: + - conan profile update settings.compiler.libcxx=libstdc++11 default + + - os: linux + compiler: clang + + - os: osx + osx_image: xcode11.3 + env: + - CC=clang + - CXX=clang++ + + +before_install: + - pip3 install -U pip virtualenv + - virtualenv -p python3 ~/venv + - source ~/venv/bin/activate + +install: + # Use Conan to install dependencies + - pip3 install -U conan + - conan profile new --detect default + +script: + - mkdir build && cd build + - travis_wait sh -c 'conan install ../.ci/conanfile.txt -s compiler.cppstd=11 -s build_type=Release --build missing > build.log' + - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_MODULE_PATH=$(pwd) + - cmake --build . diff --git a/CMakeLists.txt b/CMakeLists.txt index 02ae01bf..62f0a38f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,9 +10,8 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) endif() project(FreeLing) -set(PACKAGE_NAME "FreeLing") set(VERSION "4.1") -set(PACKAGE_STRING "\"${PACKAGE_NAME} ${VERSION}\"") +set(PACKAGE_STRING "\"${CMAKE_PROJECT_NAME} ${VERSION}\"") set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") # Needed to find libraries if not installed in system path # Add compiler definitions @@ -28,10 +27,9 @@ option(TRACES "Enable traces" OFF) option(WARNINGS "Enable warnings" ON) option(XPRESSIVE "Xpressive regex" OFF) option(JAVA_API "Build Java API" OFF) -option(JAVA_API "Build Java API" OFF) option(PERL_API "Build Perl API" OFF) option(PYTHON2_API "Build Python 2.7 API" OFF) -option(PERL_API "Build Perl API" OFF) +option(PYTHON3_API "Build Python 3 API" OFF) # Check for dependencies -- ZLIB find_package(ZLIB REQUIRED) @@ -63,11 +61,11 @@ endif() install(DIRECTORY data/ DESTINATION share/freeling PATTERN "dictionary" EXCLUDE - PATTERN "parameters.*.gz.*" EXCLUDE - PATTERN "model*.gz.*" EXCLUDE - PATTERN "*embeddings*.gz.*" EXCLUDE - PATTERN "model*.crf.*" EXCLUDE - PATTERN "Makefile*" EXCLUDE) + PATTERN "parameters.*.gz.*" EXCLUDE + PATTERN "model*.gz.*" EXCLUDE + PATTERN "*embeddings*.gz.*" EXCLUDE + PATTERN "model*.crf.*" EXCLUDE + PATTERN "Makefile*" EXCLUDE) #### Data installation hooks SET(languages "as;ca;cs;cy;de;en;es;fr;gl;hr;it;nb;pt;ru;sl") diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 00000000..612fc8c7 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,16 @@ +image: Visual Studio 2017 + +install: + - C:\Python38-x64\python --version + - set PATH=C:\Python38-x64\Scripts;%PATH% + - C:\Python38-x64\python -m pip install conan + +before_build: + - conan profile new --detect default + +build_script: + - mkdir build && cd build + - conan install ../.ci/conanfile.txt -s compiler.cppstd=11 -s build_type=Release --build missing + - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" + - cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MODULE_PATH=%cd:\=/% + - nmake install diff --git a/src/libdynet/CMakeLists.txt b/src/libdynet/CMakeLists.txt index f592036b..78f7cb06 100644 --- a/src/libdynet/CMakeLists.txt +++ b/src/libdynet/CMakeLists.txt @@ -1,8 +1,6 @@ project(dynet) cmake_minimum_required(VERSION 2.8 FATAL_ERROR) -set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) - # DYNET uses Eigen which exploits modern CPU architectures. To get the # best possible performance, the following are recommended: # 1. use very recent versions of gcc or Clang to build @@ -126,13 +124,6 @@ if(ENABLE_BOOST) set(Boost_REALPATH ON) find_package(Boost COMPONENTS program_options regex serialization REQUIRED) message("-- Boost dir is " ${Boost_INCLUDE_DIR}) - include_directories(${Boost_INCLUDE_DIR}) - if(MSVC) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LIBPATH:${Boost_LIBRARY_DIRS}") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LIBPATH:${Boost_LIBRARY_DIRS}") - else() - set(LIBS ${LIBS} ${Boost_LIBRARIES}) - endif() endif() if(BACKEND) @@ -171,17 +162,7 @@ if (WITH_CUDA_BACKEND) endif() # look for Eigen -if (DEFINED ENV{EIGEN3_INCLUDE_DIR} AND NOT DEFINED EIGEN3_INCLUDE_DIR) # use env variable if not set - set(EIGEN3_INCLUDE_DIR $ENV{EIGEN3_INCLUDE_DIR}) -endif() -get_filename_component(EIGEN3_INCLUDE_DIR "${EIGEN3_INCLUDE_DIR}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") -set(EIGEN3_INCLUDE_DIR ${EIGEN3_INCLUDE_DIR} CACHE STRING "" FORCE) -message("-- Eigen dir is " ${EIGEN3_INCLUDE_DIR}) find_package(Eigen3 REQUIRED) -include_directories(${EIGEN3_INCLUDE_DIR}) - -FIND_PACKAGE(Threads REQUIRED) -set(LIBS ${LIBS} ${CMAKE_THREAD_LIBS_INIT}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) include_directories(${CMAKE_CURRENT_BINARY_DIR}) diff --git a/src/libdynet/dynet/CMakeLists.txt b/src/libdynet/dynet/CMakeLists.txt index 5a69b89c..e39253f5 100644 --- a/src/libdynet/dynet/CMakeLists.txt +++ b/src/libdynet/dynet/CMakeLists.txt @@ -207,9 +207,6 @@ set(dynet_gpu_SRCS gpu-ops.cu) file(GLOB TEST_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} tests/*.cc) -if (NOT MSVC) - set(BUILD_SHARED_LIBS ON) -endif() #foreach(test_src ${TEST_SRCS}) #Extract the filename without an extension (NAME_WE) @@ -219,7 +216,7 @@ endif() # add_executable(${testName} ${test_src}) #link to Boost libraries AND your targets and dependencies -# target_link_libraries(${testName} dynet ${LIBS}) +# target_link_libraries(${testName} dynet Boost::Boost) # set_target_properties(${testName} PROPERTIES # RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests.bin) @@ -292,11 +289,11 @@ if(WITH_CUDA_BACKEND) target_compile_definitions(dynet PRIVATE HAVE_CUDNN) endif() cuda_add_cublas_to_target(dynet) - target_link_libraries(dynet ${LIBS}) + target_link_libraries(dynet Boost::Boost Eigen3::Eigen3) else() # Build cpu library add_library(dynet ${dynet_library_SRCS} ${dynet_library_HDRS}) - target_link_libraries(dynet ${LIBS}) + target_link_libraries(dynet Boost::Boost Eigen3::Eigen3) endif(WITH_CUDA_BACKEND) install(FILES ${dynet_library_HDRS} DESTINATION include/dynet) diff --git a/src/libfoma/CMakeLists.txt b/src/libfoma/CMakeLists.txt index 8c847830..0dd733ac 100644 --- a/src/libfoma/CMakeLists.txt +++ b/src/libfoma/CMakeLists.txt @@ -1,6 +1,4 @@ -include_directories( ${ZLIB_INCLUDE_DIRS} ) - if (WIN32) add_definitions(-DFOMA_EXPORTS=1 -D_CRT_SECURE_NO_WARNINGS=1 -D_CRT_NONSTDC_NO_DEPRECATE=1 -DYY_NO_UNISTD_H=1 -DNDEBUG=1 -D_WINDOWS=1 -D_USRDLL=1 -DLIBFOMA_EXPORTS=1 -DWIN32=1) endif() @@ -10,7 +8,7 @@ foma/apply.c foma/coaccessible.c foma/constructions.c foma/define.c foma/determi ) add_library(foma ${sources}) -target_link_libraries(foma ${ZLIB_LIBRARIES}) +target_link_libraries(foma ZLIB::ZLIB) set_target_properties(foma PROPERTIES LINKER_LANGUAGE CXX) target_include_directories(foma PUBLIC .) diff --git a/src/libfoma/foma/foma.h b/src/libfoma/foma/foma.h index 31bf857a..27a76cc7 100644 --- a/src/libfoma/foma/foma.h +++ b/src/libfoma/foma/foma.h @@ -25,8 +25,8 @@ #define PROMPT_A 1 /* Apply prompt */ #ifdef MAIN_MODULE -struct defined_networks *g_defines; -struct defined_functions *g_defines_f; +struct defined_networks *g_defines = 0; +struct defined_functions *g_defines_f = 0; #else extern struct defined_networks *g_defines; extern struct defined_functions *g_defines_f; diff --git a/src/libfreeling/CMakeLists.txt b/src/libfreeling/CMakeLists.txt index 667f7b61..2485a07b 100644 --- a/src/libfreeling/CMakeLists.txt +++ b/src/libfreeling/CMakeLists.txt @@ -1,11 +1,4 @@ -include_directories(${Boost_INCLUDE_DIRS}) -include_directories(${ICU_INCLUDE_DIRS}) -include_directories(${ZLIB_INCLUDE_DIRS}) - -link_directories(${Boost_LIBRARY_DIRS}) -link_directories(${ICU_LIBRARY_DIRS}) - if (WIN32) # compiler definitions for windows add_definitions(-DFL_EXPORTS=1 -D_CRT_SECURE_NO_WARNINGS=1 -D_CRT_NONSTDC_NO_DEPRECATE=1 -DNOMINMAX -DNDEBUG=1 -D_WINDOWS=1 -D_USRDLL=1 -DLIBFREELING_EXPORTS=1 -DWIN32=1) @@ -39,7 +32,7 @@ version.cc util.cc regexp.cc traces.cc language.cc configfile.cc analyzer.cc ana ) add_library(freeling ${freeling_SRCS}) -target_link_libraries(freeling foma treeler dynet crfsuite ${Boost_LIBRARIES} ${ICU_UC_LIBRARY} ${ICU_I18N_LIBRARY}) +target_link_libraries(freeling foma treeler dynet crfsuite Boost::Boost ICU::ICU) install(TARGETS freeling RUNTIME DESTINATION bin diff --git a/src/libtreeler/CMakeLists.txt b/src/libtreeler/CMakeLists.txt index ef7250d5..e42e22ad 100644 --- a/src/libtreeler/CMakeLists.txt +++ b/src/libtreeler/CMakeLists.txt @@ -3,8 +3,6 @@ file(GLOB_RECURSE treeler_SRC treeler/base/token.cc treeler/base/fidx.cc treeler/base/dictionary.cc treeler/util/options.cc treeler/util/char-utils.cc treeler/util/timer.cc treeler/io/io-basic.cc treeler/control/factory-base.cc treeler/dep/part-dep1.cc treeler/dep/parser-projdep1.cc treeler/dep/part-dep2.cc treeler/dep/part-dep2-index.cc treeler/dep/parser-projdep2.cc treeler/dep/pos-symbols.cc treeler/dep/dependency_parser.cc treeler/tag/part-tag.cc treeler/tag/tuple-seq.cc treeler/tag/io-tag.cc treeler/class/class-basic.cc treeler/class/io-class.cc treeler/class/fgen-class.cc treeler/class/model-mc.cc treeler/srl/part-srl0.cc treeler/srl/simple-parser.cc treeler/srl/srl_parser.cc ) -include_directories( ${ZLIB_INCLUDE_DIRS} ) - if (WIN32) list(APPEND treeler_SRC treeler/base/windll.cc) add_definitions(-DTREELER_EXPORTS=1 -D_CRT_SECURE_NO_WARNINGS=1 -DNDEBUG=1 -D_WINDOWS=1 -DWIN32=1 -DNOMINMAX=1) @@ -21,7 +19,7 @@ endif() add_library(treeler ${treeler_SRC}) set_target_properties(treeler PROPERTIES LINKER_LANGUAGE CXX) -target_link_libraries(treeler ${ZLIB_LIBRARIES}) +target_link_libraries(treeler ZLIB::ZLIB) target_include_directories(treeler PUBLIC .) # TODO: Here we are also including 'main' install(TARGETS treeler diff --git a/src/libtreeler/main/CMakeLists.txt b/src/libtreeler/main/CMakeLists.txt index f7c77915..c2a60c67 100644 --- a/src/libtreeler/main/CMakeLists.txt +++ b/src/libtreeler/main/CMakeLists.txt @@ -8,7 +8,7 @@ endif() add_executable(treeler_bin ${treeler_main_SRC}) target_include_directories(treeler_bin PRIVATE .) -target_link_libraries(treeler_bin treeler ${ZLIB_LIBRARIES}) +target_link_libraries(treeler_bin treeler ZLIB::ZLIB) set_target_properties(treeler_bin PROPERTIES OUTPUT_NAME treeler) install(TARGETS treeler_bin diff --git a/src/main/CMakeLists.txt b/src/main/CMakeLists.txt index 1b95b8a0..83156891 100644 --- a/src/main/CMakeLists.txt +++ b/src/main/CMakeLists.txt @@ -1,9 +1,4 @@ -# Dependencies -include_directories(${Boost_INCLUDE_DIR}) -include_directories(${ICU_INCLUDE_DIRS}) -include_directories(${ZLIB_INCLUDE_DIRS}) - if (WIN32) # compiler defintions for windows add_definitions(-D_CRT_SECURE_NO_WARNINGS=1 -D_CRT_NONSTDC_NO_DEPRECATE=1 -DNOMINMAX -DNDEBUG=1 -DWIN32=1 -D_CONSOLE=1) diff --git a/src/utilities/CMakeLists.txt b/src/utilities/CMakeLists.txt index 2b070e9e..80e8d1d9 100644 --- a/src/utilities/CMakeLists.txt +++ b/src/utilities/CMakeLists.txt @@ -1,7 +1,4 @@ -include_directories(${Boost_INCLUDE_DIR}) -include_directories(${ICU_INCLUDE_DIRS}) - if (WIN32) # compiler defintions for windows add_definitions(-D_CRT_SECURE_NO_WARNINGS=1 -D_CRT_NONSTDC_NO_DEPRECATE=1 -DNOMINMAX -DNDEBUG=1 -DWIN32=1 -D_CONSOLE=1) @@ -12,11 +9,11 @@ endif() # build-dict add_executable(build-dict installation/build-dict.cc) -target_link_libraries(build-dict ${Boost_LIBRARIES}) +target_link_libraries(build-dict Boost::Boost) # fusion-mw add_executable(fusion-mw installation/fusion-mw.cc) -target_link_libraries(fusion-mw ${Boost_LIBRARIES}) +target_link_libraries(fusion-mw Boost::Boost) # dicc2phon add_executable(dicc2phon installation/dicc2phon.cc) @@ -24,7 +21,7 @@ target_link_libraries(dicc2phon freeling) # gz-cat add_executable(gz-cat installation/gz-cat.cc) -target_link_libraries(gz-cat freeling ${Boost_LIBRARIES}) +target_link_libraries(gz-cat freeling Boost::Boost) # convert_model add_executable(convert_model embeddings/convert_model.cc)