diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index c1eaaa5..dadee86 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -12,12 +12,14 @@ jobs: sudo apt-get -qy update sudo apt-get -qfy install wget ca-certificates wget -q https://apertium.projectjj.com/apt/install-nightly.sh -O - | sudo bash - sudo apt-get -qfy install --no-install-recommends build-essential cmake lttoolbox-dev pkg-config libxml2-dev - - name: cmake - run: cmake . + sudo apt-get -qfy install --no-install-recommends build-essential autoconf autotools-dev lttoolbox-dev pkg-config libxml2-dev + - name: autoreconf + run: autoreconf -fvi + - name: configure + run: ./configure - name: build - run: cmake --build . -v -j 4 + run: make -j4 V=1 VERBOSE=1 - name: tests - run: ctest -V + run: make test - name: make install - run: sudo cmake --install . + run: sudo make install diff --git a/.gitignore b/.gitignore index 9ee8345..d038cb6 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,17 @@ apertium-anaphora CTestTestfile.cmake Testing/ apertium-validate-anaphora +INSTALL +Makefile.in +aclocal.m4 +autom4te.cache +build +configure +depcomp +install-sh +missing +src/Makefile.in +config.log +config.status +.deps +*.o diff --git a/.travis.yml b/.travis.yml index 886a394..201ecc3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,12 +6,13 @@ compiler: before_install: - wget https://apertium.projectjj.com/apt/install-nightly.sh -O - | sudo bash - - sudo apt-get install -qfy build-essential cmake lttoolbox-dev pkg-config libxml2-dev + - sudo apt-get install -qfy build-essential autoconf autotools-dev lttoolbox-dev pkg-config libxml2-dev script: - $CXX --version - export V=1 VERBOSE=1 - - cmake . - - cmake --build . -j 4 - - ctest -V - - cmake --install . + - autoreconf -fvi + - ./configure + - make -j4 + - make test + - sudo make install diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 61661c0..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,83 +0,0 @@ -set(CMAKE_LEGACY_CYGWIN_WIN32 0) -cmake_minimum_required(VERSION 3.0 FATAL_ERROR) -project(apertium-anaphora - VERSION 1.0.0 - LANGUAGES CXX - ) -set(VERSION ${PROJECT_VERSION}) - -# Release or Debug -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "Release") -endif() - -set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) -set(CMAKE_POSITION_INDEPENDENT_CODE ON) -set(CMAKE_MACOSX_RPATH ON) - -option(BUILD_SHARED_LIBS "Set to OFF to use static library" ON) - -include(GNUInstallDirs) - -if(MSVC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8 /permissive- /W4 /MP") - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /O2") - set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG") -else() - set(_FLAGS_COMMON "-Wall -Wextra -Wno-missing-field-initializers -Wno-deprecated -Wno-unused-parameter -fPIC") - - include(CheckCXXCompilerFlag) - - foreach(flag "-Wno-unused-result" "-flto") - string(REGEX REPLACE "[^A-Za-z0-9]" "-" _flag ${flag}) - CHECK_CXX_COMPILER_FLAG(${flag} COMPILER_SUPPORTS_${_flag}) - if(COMPILER_SUPPORTS_${_flag}) - set(_FLAGS_COMMON "${_FLAGS_COMMON} ${flag}") - endif() - endforeach() - if(COMPILER_SUPPORTS_flto) - set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -flto") - endif() - - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_FLAGS_COMMON} -fvisibility-inlines-hidden") - - # Require latest possible C++ standard - foreach(flag "-std=c++20" "-std=c++2a" "-std=c++17" "-std=c++1z" "-std=c++14" "-std=c++1y") - string(REGEX REPLACE "[^a-z0-9]" "-" _flag ${flag}) - CHECK_CXX_COMPILER_FLAG(${flag} COMPILER_SUPPORTS_${_flag}) - if(COMPILER_SUPPORTS_${_flag}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") - set(_ENABLED_CXX ${flag}) - break() - endif() - endforeach() - if(NOT _ENABLED_CXX) - message(FATAL_ERROR "Could not enable at least C++1y (C++14) - upgrade your compiler") - endif() - - # Generate pkg-config file - set(prefix ${CMAKE_INSTALL_PREFIX}) - configure_file(apertium-anaphora.pc.in apertium-anaphora.pc @ONLY) - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/apertium-anaphora.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/") -endif() - -find_package(PkgConfig REQUIRED) - -pkg_search_module(LIBXML2 REQUIRED libxml-2.0) -include_directories(${LIBXML2_INCLUDE_DIRS}) -link_directories(${LIBXML2_LIBRARY_DIRS}) - -pkg_search_module(LTTOOLBOX REQUIRED lttoolbox) -include_directories(${LTTOOLBOX_INCLUDE_DIRS}) -link_directories(${LTTOOLBOX_LIBRARY_DIRS}) - -if(WIN32) - add_definitions(-D_SECURE_SCL=0 -D_ITERATOR_DEBUG_LEVEL=0 -D_CRT_SECURE_NO_DEPRECATE -DWIN32_LEAN_AND_MEAN -DVC_EXTRALEAN -DNOMINMAX) -endif() - -add_subdirectory(src) - -enable_testing() -add_test(NAME tests - COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tests/test.sh" $ - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests) diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..e69de29 diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..b3e66c6 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,9 @@ +pkgconfigdir = $(libdir)/pkgconfig +dist_pkgconfig_DATA = apertium-anaphora.pc + +SUBDIRS = src + +EXTRA_DIST=autogen.sh + +test: + pushd $(abs_srcdir)/tests/ && bash test.sh $(abs_builddir)/src/apertium-anaphora && popd diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/README b/README index d48766f..ad9602d 100644 --- a/README +++ b/README @@ -1,13 +1,13 @@ # Apertium Anaphora Resolution -## Google Summer of Code 2019 + [![Build Status](https://travis-ci.com/apertium/apertium-anaphora.svg?branch=master)](https://travis-ci.com/apertium/apertium-anaphora) ### Documentation http://wiki.apertium.org/wiki/Anaphora_Resolution_Module ### How to Run -- `./cmake.sh` -- `make -j4` +- `./autogen.sh [--prefix=/path/to/your/prefix]` +- `make` - `sudo make install` - Usage: `apertium-anaphora [-z] apertium-xxx-yyy.xxx-yyy.arx [input [output]]` @@ -26,3 +26,7 @@ http://wiki.apertium.org/wiki/Anaphora_Resolution_Module This package is licensed under the [GNU General Public License](https://www.gnu.org/licenses/licenses.html#GPL) as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. If it becomes necessary, we are open to dual-licensing the package under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). + +### Acknowledgements + +Google Summer of Code 2019 diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..f9f430a --- /dev/null +++ b/autogen.sh @@ -0,0 +1,35 @@ +#! /bin/sh + +# If the user specified a --prefix, take that, otherwise /usr/local/ +# is the default. +PREFIX=/usr/local +prefixnext=false +for i in "$@"; do + case $i in + --prefix=*) # equals separated: + PREFIX="${i#*=}" + ;; + --prefix) # space separated: + prefixnext=true + ;; + *) + $prefixnext && PREFIX="$i" && prefixnext=false + ;; + esac +done + +# Set the paths needed by libtool/pkg-config/aclocal etc. By inferring +# them based on --prefix , users don't have to edit ~/.bashrc. We only +# append, so if a user has some other preference, that will override. +PATH="${PATH}:/usr/local/bin" +export PATH +LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PREFIX}/lib" +export LD_LIBRARY_PATH +PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:${PREFIX}/share/pkgconfig:${PREFIX}/lib/pkgconfig" +export PKG_CONFIG_PATH +ACLOCAL_PATH="${ACLOCAL_PATH}:${PREFIX}/share/aclocal" +export ACLOCAL_PATH + + +# Pass on all args to configure +autoreconf -fi && ./configure "$@" diff --git a/cmake.sh b/cmake.sh deleted file mode 100755 index df59f07..0000000 --- a/cmake.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash -set -e -args=() - -while [[ $# > 0 ]]; -do - case "$1" in - --prefix) - args+=("-DCMAKE_INSTALL_PREFIX=$2") - shift 2 - ;; - --prefix=*) - args+=("-DCMAKE_INSTALL_PREFIX=${1#*=}") - shift - ;; - *) - args+=("$1") - shift - ;; - esac -done - -set -- "${args[@]}" - -echo "- rm -rf CMake caches" -rm -rf install_manifest.txt CMakeCache.txt *.cmake CMakeFiles src/CMakeFiles src/*.cmake _CPack_Packages Testing -echo "- cmake " "$@" "." -cmake "$@" . -echo "- You may now perform: make -j3" diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..7e13fb1 --- /dev/null +++ b/configure.ac @@ -0,0 +1,54 @@ +AC_PREREQ(2.61) + +AC_INIT([apertium-anaphora], [1.0.0], [khanna.tanmai@gmail.com]) +AM_INIT_AUTOMAKE +AC_CONFIG_MACRO_DIR([m4]) + +AC_PROG_CXX +AM_SANITY_CHECK +AC_LANG_CPLUSPLUS + +CFLAGS="-Wall -Wextra $CFLAGS" +CXXFLAGS="-Wall -Wextra $CXXFLAGS" + +PKG_CHECK_MODULES([LTTOOLBOX], [lttoolbox >= 3.5.2]) +AC_SUBST(LTTOOLBOX_CFLAGS) +AC_SUBST(LTTOOLBOX_LIBS) + +PKG_CHECK_MODULES([LIBXML], [libxml-2.0]) +AC_SUBST(LIBXML_CFLAGS) +AC_SUBST(LIBXML_LIBS) + +CPPFLAGS="$CPPFLAGS $CFLAGS $LTTOOLBOX_CFLAGS $LIBXML_CFLAGS" +LIBS="$LIBS $LTTOOLBOX_LIBS $LIBXML_LIBS" + +# Checks for highest supported C++ standard +AC_LANG(C++) +AX_CHECK_COMPILE_FLAG([-std=c++20], [CXXFLAGS="$CXXFLAGS -std=c++20"], [ + AX_CHECK_COMPILE_FLAG([-std=c++2a], [CXXFLAGS="$CXXFLAGS -std=c++2a"], [ + AX_CHECK_COMPILE_FLAG([-std=c++17], [CXXFLAGS="$CXXFLAGS -std=c++17"], [ + AX_CHECK_COMPILE_FLAG([-std=c++1z], [CXXFLAGS="$CXXFLAGS -std=c++1z"], [ + AX_CHECK_COMPILE_FLAG([-std=c++14], [CXXFLAGS="$CXXFLAGS -std=c++14"], [ + AX_CHECK_COMPILE_FLAG([-std=c++1y], [CXXFLAGS="$CXXFLAGS -std=c++1y"], []) + ]) + ]) + ]) + ]) +]) + +AC_PATH_PROG(BASH, bash, no) +if test x$ac_cv_path_BASH = x +then + AC_MSG_ERROR([You don't have bash installed.]) +fi +if test x$ac_cv_path_BASH = xno +then + AC_MSG_ERROR([You don't have bash installed.]) +fi + +AC_CONFIG_FILES([ + apertium-anaphora.pc + Makefile + src/Makefile + ]) +AC_OUTPUT diff --git a/m4/ax_check_compile_flag.m4 b/m4/ax_check_compile_flag.m4 new file mode 100644 index 0000000..51df0c0 --- /dev/null +++ b/m4/ax_check_compile_flag.m4 @@ -0,0 +1,74 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) +# +# DESCRIPTION +# +# Check whether the given FLAG works with the current language's compiler +# or gives an error. (Warnings, however, are ignored) +# +# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on +# success/failure. +# +# If EXTRA-FLAGS is defined, it is added to the current language's default +# flags (e.g. CFLAGS) when the check is done. The check is thus made with +# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to +# force the compiler to issue an error when a bad flag is given. +# +# INPUT gives an alternative input source to AC_COMPILE_IFELSE. +# +# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this +# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. +# +# LICENSE +# +# Copyright (c) 2008 Guido U. Draheim +# Copyright (c) 2011 Maarten Bosmans +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 3 + +AC_DEFUN([AX_CHECK_COMPILE_FLAG], +[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX +AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl +AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ + ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS + _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" + AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], + [AS_VAR_SET(CACHEVAR,[yes])], + [AS_VAR_SET(CACHEVAR,[no])]) + _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) +AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], + [m4_default([$2], :)], + [m4_default([$3], :)]) +AS_VAR_POPDEF([CACHEVAR])dnl +])dnl AX_CHECK_COMPILE_FLAGS diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt deleted file mode 100644 index 5d21c57..0000000 --- a/src/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -add_executable(apertium-anaphora - pattern_arx.cc - parse_arx.cc - parse_biltrans.cc - score.cc - anaphora.cc - ) -target_link_libraries(apertium-anaphora PRIVATE - xml2 - lttoolbox3 - ) - -install(TARGETS apertium-anaphora DESTINATION ${CMAKE_INSTALL_BINDIR}) - -configure_file(apertium-validate-anaphora.in apertium-validate-anaphora @ONLY) -install(FILES anaphora.dtd DESTINATION "${CMAKE_INSTALL_DATADIR}/apertium-anaphora/") -install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/apertium-validate-anaphora" DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..8e78d65 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,24 @@ +AM_LDFLAGS=$(LIBS) + +bin_PROGRAMS = apertium-anaphora +bin_SCRIPTS = apertium-validate-anaphora + +apertium_anaphora_SOURCES = \ + anaphora.cc \ + parse_arx.cc \ + parse_biltrans.cc \ + pattern_arx.cc \ + score.cc + +apertium_anaphoradir = $(prefix)/share/apertium-anaphora +apertium_anaphora_DATA = anaphora.dtd + +apertium-validate-anaphora: Makefile.am validate-header.sh + @echo "Creating apertium-validate-anaphora script" + @echo "#!$(BASH)" > $@ + @cat $(abs_srcdir)/validate-header.sh >> $@ + @echo "xmllint --dtdvalid \"$(apertium_anaphoradir)\"/anaphora.dtd --noout \"\$$FILE1\"" >>$@ + @chmod a+x $@ + +EXTRA_DIST = anaphora.dtd +CLEANFILES = $(bin_SCRIPTS) diff --git a/src/apertium-validate-anaphora.in b/src/validate-header.sh old mode 100755 new mode 100644 similarity index 62% rename from src/apertium-validate-anaphora.in rename to src/validate-header.sh index be84ef6..07a95d2 --- a/src/apertium-validate-anaphora.in +++ b/src/validate-header.sh @@ -1,4 +1,4 @@ -#!/bin/bash + if [[ $# != 1 ]]; then echo "USAGE: $(basename "$0") " exit 1 @@ -11,4 +11,3 @@ if [[ ! -e "$FILE1" ]]; then exit 1 fi -xmllint --dtdvalid @CMAKE_INSTALL_FULL_DATADIR@/apertium-anaphora/anaphora.dtd --noout "$FILE1"