From a3964ec8fa826df7b04115474e355620bb9bee49 Mon Sep 17 00:00:00 2001 From: Francis Tyers Date: Mon, 6 Jul 2020 14:27:55 +0100 Subject: [PATCH] Autotools (#43) VPATH-compatible autotools --- .github/workflows/build.yaml | 14 ++-- .gitignore | 14 ++++ .travis.yml | 11 +-- CMakeLists.txt | 83 ------------------- ChangeLog | 0 Makefile.am | 9 ++ NEWS | 0 README | 10 ++- autogen.sh | 35 ++++++++ cmake.sh | 29 ------- configure.ac | 54 ++++++++++++ m4/ax_check_compile_flag.m4 | 74 +++++++++++++++++ src/CMakeLists.txt | 17 ---- src/Makefile.am | 24 ++++++ ...alidate-anaphora.in => validate-header.sh} | 3 +- 15 files changed, 232 insertions(+), 145 deletions(-) delete mode 100644 CMakeLists.txt create mode 100644 ChangeLog create mode 100644 Makefile.am create mode 100644 NEWS create mode 100755 autogen.sh delete mode 100755 cmake.sh create mode 100644 configure.ac create mode 100644 m4/ax_check_compile_flag.m4 delete mode 100644 src/CMakeLists.txt create mode 100644 src/Makefile.am rename src/{apertium-validate-anaphora.in => validate-header.sh} (62%) mode change 100755 => 100644 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"