diff --git a/.gitignore b/.gitignore index b10fcf8cd3bd85cdc93c5b0cf1ec91a7f1fa731f..9b2cf17da8145dda44248753aa1ede1dd5539c2d 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,8 @@ BayesWave BayesWaveCleanFrame BayesWavePost BayesWaveToLALPSD +src/version.h +src/bayeswave.pc # autotools stuff .libs/ @@ -31,7 +33,9 @@ configure libtool Makefile Makefile.in +bayeswave.spec # docs stuff doc/_build doc/index.rst + diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b87a810d6276bed44ea814850fe15af3eea8deb8..0921c9046b886c8094169ccb2ee52f1f91807e20 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,7 +4,7 @@ variables: NIGHTLY: $CI_REGISTRY_IMAGE:nightly TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG BUILD_DIR: test-install - BUILD_TARGET: ${CI_PROJECT_DIR}/${BUILD_DIR} + BUILD_TARGET: $CI_PROJECT_DIR/$BUILD_DIR TEST_OUTPUT: test-output stages: @@ -16,59 +16,61 @@ stages: build-env: stage: build script: - - mkdir -p ${BUILD_TARGET} - - sed "s|INSTALL_DIR|${BUILD_DIR}|g" ${CI_PROJECT_DIR}/etc/bayeswave-user-env.sh > ${BUILD_TARGET}/bayeswave-user-env.sh + - mkdir -p $BUILD_TARGET + - sed "s|INSTALL_DIR|$BUILD_DIR|g" $CI_PROJECT_DIR/etc/bayeswave-user-env.sh > $BUILD_TARGET/bayeswave-user-env.sh artifacts: paths: - - ${BUILD_DIR} + - $BUILD_DIR build-bayeswave: stage: build - image: ligo/software:stretch + image: ligo/software:el7 script: - - pushd ${CI_PROJECT_DIR}/src - - autoreconf --verbose --force --install --make - - ./configure --prefix ${BUILD_TARGET} CFLAGS="-Wno-format-truncation -g -O3" - - make - - make install + - pushd $CI_PROJECT_DIR + - mkdir -p build + - cmake3 . -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=true -DCMAKE_INSTALL_PREFIX=$BUILD_DIR + - cmake3 --build . -- VERBOSE=1 + - cmake3 --build . --target install - popd artifacts: paths: - - ${BUILD_DIR} + - $BUILD_DIR build-BayesWaveUtils: stage: build - image: ligo/software:stretch + image: ligo/software:el7 script: - pushd BayesWaveUtils - - python setup.py install --prefix ${BUILD_TARGET} + - python setup.py install --prefix $BUILD_TARGET - popd artifacts: paths: - - ${BUILD_DIR} + - $BUILD_DIR # FIXME: including the full commandline here is illustrative. We have a test # script in the repository that does the same thing. test:BayesWave: stage: test - image: ligo/software:stretch + image: ligo/software:el7 script: - - source ${BUILD_DIR}/bayeswave-user-env.sh + - source $BUILD_DIR/bayeswave-user-env.sh + - cat $BUILD_DIR/bayeswave-user-env.sh + - ls -R $BUILD_DIR - BayesWave --help - "BayesWave --ifo H1 --H1-flow 32 \ --H1-cache LALSimAdLIGO --H1-channel LALSimAdLIGO \ --trigtime 900000000.00 --srate 512 --seglen 4 --PSDstart 900000000 \ --PSDlength 1024 --NCmin 2 --NCmax 2 --dataseed 1234 \ - --Niter 500 --outputDir ${TEST_OUTPUT}" + --Niter 500 --outputDir $TEST_OUTPUT" dependencies: - build-env - build-bayeswave test:BayesWavePost: stage: test - image: ligo/software:stretch + image: ligo/software:el7 script: - - source ${BUILD_DIR}/bayeswave-user-env.sh + - source $BUILD_DIR/bayeswave-user-env.sh - BayesWavePost --help dependencies: - build-env @@ -76,15 +78,24 @@ test:BayesWavePost: test:bayeswave_pipe: stage: test - image: ligo/software:stretch + image: ligo/software:el7 script: - - ls ${BUILD_DIR} - - source ${BUILD_DIR}/bayeswave-user-env.sh + - ls $BUILD_DIR + - source $BUILD_DIR/bayeswave-user-env.sh - bayeswave_pipe --help dependencies: - build-env - build-BayesWaveUtils +test:docker: + stage: test + image: docker:latest + before_script: + - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY + script: + - docker build --pull -t $CI_REGISTRY_IMAGE:latest --file Dockerfile . + - docker run $CI_REGISTRY_IMAGE:latest /test-bayeswave.sh + # FIXME: Add a proper test stage for the docker images docker:latest: @@ -97,7 +108,6 @@ docker:latest: - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY script: - docker build --pull -t $CI_REGISTRY_IMAGE:latest --file Dockerfile . - - docker run -u $(id -u):$(id -g) $CI_REGISTRY_IMAGE:latest "/opt/lscsoft/bayeswave/test/test-bayeswave.sh" - docker push $CI_REGISTRY_IMAGE:latest @@ -111,7 +121,6 @@ docker:tags: - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY script: - docker build --pull -t $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG --file Dockerfile . - - docker run -u $(id -u):$(id -g) $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG "/opt/lscsoft/bayeswave/test/test-bayeswave.sh" - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG docs: @@ -124,7 +133,7 @@ docs: - apt-get -yqq update - apt-get -yqq install curl - curl --location --output pandoc.deb https://github.com/jgm/pandoc/releases/download/2.7.2/pandoc-2.7.2-1-amd64.deb - - dpkg --install pandoc.deb || { apt-get -y -f install; dpkg --install pandoc.deb; } + - dpkg --install pandoc.deb || apt-get -y -f install; dpkg --install pandoc.deb; # install python dependencies - python3 -m pip install -r doc/requirements.txt script: diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..dbb4373836dddbb689b39ead50fb40f66ba3c155 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,67 @@ +# +# CMake packaging for BayesWave +# Copyright 2019 James Alexander Clark <james.clark@ligo.org> +# Based on CMake packaging for libframe & Frv by Duncan MacLeod <duncan.macleod@ligo.org> +# + +# -- package info ----------- + +cmake_minimum_required(VERSION 3.12.0 FATAL_ERROR) +project( + bayeswave + LANGUAGES C + VERSION 1.0.3 + DESCRIPTION "LIGO/VIRGO burst analysis algorithm" + HOMEPAGE_URL "https://git.ligo.org/lscsoft/bayeswave" +) + +include(GNUInstallDirs) +include(CheckFunctionExists) +find_package(PkgConfig) +find_package(Git) + +# -- build components ------- + +# C library | enable/disable with -DENABLE_C={yes,no} (default yes) +add_subdirectory(src) +#add_subdirectory(doc) + +# -- packaging components --- + +set(SPEC_IN "${CMAKE_CURRENT_SOURCE_DIR}/bayeswave.spec.in") +set(SPEC "${CMAKE_CURRENT_SOURCE_DIR}/bayeswave.spec") +configure_file(${SPEC_IN} ${SPEC} @ONLY) + +# -- build tarball ---------- +# +# to build a source tarball: +# +# mkdir dist +# pushd dist +# cmake .. +# cmake --build . --target package_source +# + +set(CPACK_PACKAGE_MAJOR ${${PROJECT_NAME}_MAJOR_VERSION}) +set(CPACK_PACKAGE_MINOR ${${PROJECT_NAME}_MINOR_VERSION}) +set(CPACK_PACKAGE_PATCH ${${PROJECT_NAME}_PATCH_VERSION}) +set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_MAJOR}.${CPACK_PACKAGE_MINOR}.${CPACK_PACKAGE_PATCH}") + +set(CPACK_SOURCE_GENERATOR TXZ) +set(CPACK_SOURCE_PACKAGE_FILE_NAME ${PROJECT_NAME}-${${PROJECT_NAME}_VERSION}) +set(CPACK_SOURCE_IGNORE_FILES + "/.*~$/" + ".*~$" + "\\\\.svn/" + "\\\\.git" + "build/" + "CMakeFiles/" + "CMakeCache.txt" + "_CPack_Packages/" + "\\\\.cmake" + "Makefile" + "\\\\.deps/" + "autom4te.cache/" + "\\\\.tar\\\\.xz" +) +include(CPack) diff --git a/Dockerfile b/Dockerfile index a8f5163eec4d130587b0af66fe1b53499d540d58..08cc7830b08368b3cbc0f3d4198e6a2347823a7f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,36 +1,59 @@ -FROM containers.ligo.org/lscsoft/lalsuite/lalsuite-v6.53:stretch +FROM containers.ligo.org/lscsoft/lalsuite/lalsuite-v6.53:el7 ARG version RUN echo "Building bayeswave" MAINTAINER James Alexander Clark <james.clark@ligo.org> -# Dependencies -RUN apt-get update && apt-get install --assume-yes \ - build-essential \ - pkg-config \ - python-pip \ +RUN yum upgrade -y && \ + yum install -y gcc \ + cmake3 \ + gcc-c++ \ + help2man \ + rpm-build \ + which \ git \ - python-ligo-lw + python-ligo-lw && \ + yum clean all && \ + rm -rf /var/cache/yum -RUN python -m pip install --upgrade setuptools +# RUN curl -O https://bootstrap.pypa.io/get-pip.py && \ +# python get-pip.py && \ +# rm get-pip.py # Copy and build BayesWave -WORKDIR / -# This seems very hacky but will get us git verion info in the configure.ac: -COPY .git / -COPY install.sh / -COPY src /src -copy etc/bayeswave-user-env.sh /etc/bayeswave-user-env.sh -COPY BayesWaveUtils /BayesWaveUtils -RUN sh install.sh /opt/lscsoft/bayeswave -COPY test /opt/lscsoft/bayeswave/test -RUN rm -rf .git install.sh /src /BayesWaveUtils /etc/bayeswave-user-env.sh -RUN mkdir -p /cvmfs /hdfs /hadoop /etc/condor - -# BayesWave env -ENV PATH /opt/lscsoft/bayeswave/bin:${PATH} -ENV LD_LIBRARY_PATH /opt/lscsoft/bayeswave/lib:${LD_LIBRARY_PATH} -ENV PYTHONPATH /opt/lscsoft/bayeswave/lib/python2.7/site-packages:${PYTHONPATH} +WORKDIR /tmp +RUN mkdir /tmp/bayeswave +COPY bayeswave.spec.in /tmp/bayeswave +COPY .git /tmp/bayeswave +COPY CMakeLists.txt /tmp/bayeswave +COPY src /tmp/bayeswave/src +COPY etc/bayeswave-user-env.sh /tmp/bayeswave/etc/bayeswave-user-env.sh +COPY README.md /tmp +COPY BayesWaveUtils /tmp/bayeswave/BayesWaveUtils +ADD test/test-bayeswave.sh / + +# Python Utils +RUN cd /tmp/bayeswave/BayesWaveUtils && \ + python /tmp/bayeswave/BayesWaveUtils/setup.py install + +RUN mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} +RUN echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros +RUN mkdir dist && \ + pushd dist && \ + cmake3 /tmp/bayeswave && \ + cmake3 --build . --target package_source && \ + mv bayeswave-*.tar.xz /root/rpmbuild/SOURCES/ && \ + popd +RUN rpmbuild -ba /tmp/bayeswave/bayeswave.spec +RUN rpm -ivh /root/rpmbuild/RPMS/x86_64/bayeswave-1.0.3-1.el7.x86_64.rpm + +RUN rm -rf .git install.sh /src /BayesWaveUtils /etc/bayeswave-user-env.sh /build.sh /CMakeLists.txt /build +RUN mkdir -p /cvmfs /hdfs /hadoop /etc/condor /test + +# Clean up +RUN rm -rf /tmp/* ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} + +WORKDIR / ENTRYPOINT ["/bin/bash"] diff --git a/bayeswave.spec.in b/bayeswave.spec.in new file mode 100644 index 0000000000000000000000000000000000000000..fd95393b7b0d1d801760b4ec21cfa733d26857e8 --- /dev/null +++ b/bayeswave.spec.in @@ -0,0 +1,110 @@ +Name: @PROJECT_NAME@ +Version: @PROJECT_VERSION@ +Release: 1%{?dist} +Summary: @PROJECT_DESCRIPTION@ +License: GPLv2 +Source: http://software.ligo.org/lscsoft/source/%{name}-%{version}.tar.xz +URL: https://git.ligo.org/lscsoft/bayeswave +Packager: Duncan Macleod <duncan.macleod@ligo.org> +Prefix: %{_prefix} + +# -- build requires --------- + +BuildRequires: gcc, gcc-c++, glibc +BuildRequires: cmake3 >= 3.12.0 +BuildRequires: make +BuildRequires: help2man +BuildRequires: gsl-devel +BuildRequires: fftw-devel +BuildRequires: libframe-devel +BuildRequires: libmetaio-devel +BuildRequires: lal-devel +BuildRequires: lalframe-devel +BuildRequires: lalmetaio-devel +BuildRequires: lalsimulation-devel +BuildRequires: lalinspiral-devel +BuildRequires: lalinference-devel + +# -- package definitions ---- + +%description +A Bayesian algorithm designed to robustly distinguish gravitational wave +signals from noise and instrumental glitches without relying on any prior +assumptions of waveform morphology. + +BayesWave produces posterior probability distributions directly on +gravitational wave signals and instrumental glitches, allowing robust, +morphology-independent waveform reconstruction. + + +%package devel +Summary: Files and documentation needed for compiling bayeswave programs +Requires: %{name} = %{version} +%description devel +A Bayesian algorithm designed to robustly distinguish gravitational wave +signals from noise and instrumental glitches without relying on any prior +assumptions of waveform morphology. + +This package contains the files needed for building libframe programs + +# -- build stages ----------- + +%prep +%setup -c -T -D -a 0 -n %{name}-%{version} + +%build +%cmake3 \ + -DCMAKE_BUILD_TYPE=Release \ + %{name}-%{version} +%make_build + +%install +%make_install +# man pages +mkdir -vp %{buildroot}%{_mandir}/man1 +export LD_LIBRARY_PATH="%{buildroot}%{_libdir}:${LD_LIBRARY_PATH}" +help2man --source %{name} --version-string %{version} \ + --section 1 --no-info --no-discard-stderr \ + --output %{buildroot}%{_mandir}/man1/BayesWave.1 %{buildroot}%{_bindir}/BayesWave +help2man --source %{name} --version-string %{version} \ + --section 1 --no-info --no-discard-stderr \ + --output %{buildroot}%{_mandir}/man1/BayesWaveCleanFrame.1 %{buildroot}%{_bindir}/BayesWaveCleanFrame +help2man --source %{name} --version-string %{version} \ + --section 1 --no-info --no-discard-stderr \ + --output %{buildroot}%{_mandir}/man1/BayesWavePost.1 %{buildroot}%{_bindir}/BayesWavePost +help2man --source %{name} --version-string %{version} \ + --section 1 --no-info --no-discard-stderr \ + --output %{buildroot}%{_mandir}/man1/BayesWaveToLALPSD.1 %{buildroot}%{_bindir}/BayesWaveToLALPSD + +%check +export LD_LIBRARY_PATH="%{buildroot}%{_libdir}:${LD_LIBRARY_PATH}" +export PKG_CONFIG_PATH="%{buildroot}%{_libdir}/pkgconfig:${PKG_CONFIG_PATH}" +# run each executable with no args (equivalent of --help) +%{buildroot}%{_bindir}/BayesWave +%{buildroot}%{_bindir}/BayesWaveCleanFrame +%{buildroot}%{_bindir}/BayesWavePost +%{buildroot}%{_bindir}/BayesWaveToLALPSD +# run pkg-config to check metadata +pkg-config --modversion @PROJECT_NAME@ + +%clean +rm -rf %{buildroot} + +# -- files ------------------ + +%files +%{_bindir}/* +%{_libdir}/*.so.* +%{_mandir}/man1/* + +%files devel +%{_libdir}/*.so +%{_libdir}/pkgconfig/* +%{_includedir}/* + +# -- changelog -------------- + +# dates should be formatted using: 'date +"%a %b %d %Y"' +%changelog +* Thu Jun 6 2019 Duncan Macleod <duncan.macleod@ligo.org> 1.3.0-1 +- Rework packaging for cmake diff --git a/build.sh b/build.sh new file mode 100755 index 0000000000000000000000000000000000000000..9ede334ae30434eefaf4540e0593f1a2cf4b76d6 --- /dev/null +++ b/build.sh @@ -0,0 +1,15 @@ +#!/bin/bash +set -e + +INSTALL_PREFIX=$1 + +rm -rf build +mkdir -p build +pushd build +cmake3 .. \ + -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=true +cmake3 --build . -- VERBOSE=1 +cmake3 --build . --target install +popd diff --git a/etc/bayeswave-user-env.sh b/etc/bayeswave-user-env.sh index 760c61e1f676b7561b76907edab1a96c70e35450..96538d5b23eea26a33663bf2db8507187153ca87 100755 --- a/etc/bayeswave-user-env.sh +++ b/etc/bayeswave-user-env.sh @@ -14,5 +14,6 @@ pyminor=$(python -c 'import sys; print(sys.version_info[1])') # BayesWave export PATH=${BAYESWAVE_PREFIX}/bin:${PATH} export LD_LIBRARY_PATH=${BAYESWAVE_PREFIX}/lib:${LD_LIBRARY_PATH} +export LD_LIBRARY_PATH=${BAYESWAVE_PREFIX}/lib64:${LD_LIBRARY_PATH} export PYTHONPATH=${BAYESWAVE_PREFIX}/lib/python${pymajor}.${pyminor}/site-packages:${PYTHONPATH} diff --git a/install.sh b/install.sh index 2d074f7ba23e57d24ee86e608768442417ecad64..2e29f166f64cbb6bf8cfc4e7d348d6f28ed6605b 100755 --- a/install.sh +++ b/install.sh @@ -17,6 +17,7 @@ set -e + install_dir=${1} # Remove trailing slash if present @@ -31,19 +32,20 @@ echo "Installing to ${install_dir}" # # Configure and make main executables # -START=${PWD} -cd src -autoreconf --verbose --force --install --make -./configure --prefix ${install_dir} CFLAGS="-Wno-format-truncation -g -O3" -make install -cd ${START} +# START=${PWD} +# cd src +# autoreconf --verbose --force --install --make +# ./configure --prefix ${install_dir} CFLAGS="-Wno-format-truncation -g -O3" +# make install +# cd ${START} +./build.sh ${install_dir} # # Install python codes # -cd BayesWaveUtils +pushd BayesWaveUtils python setup.py install --prefix ${install_dir} -cd ${START} +popd # # Environment script diff --git a/src/BayesWaveIO.c b/src/BayesWaveIO.c index 0d0194f5a462fc90295c8fa015706d53e95c2d1d..61514da2bc5828a5aa9271affeb32aba0653ad1c 100644 --- a/src/BayesWaveIO.c +++ b/src/BayesWaveIO.c @@ -19,6 +19,7 @@ #include <fftw3.h> +#include "version.h" #include "BayesLine.h" #include "BayesWave.h" #include "BayesWaveIO.h" @@ -817,7 +818,7 @@ void print_version(FILE *fptr) fprintf(fptr, " Git version: %s\n", GIT_VER); fprintf(fptr, " Git commit: %s\n", GIT_HASH); fprintf(fptr, " Git commit author: %s\n",GIT_AUTHOR); - fprintf(fptr, " Git commit date: %s\n",GIT_DATE); + fprintf(fptr, " Git commit date: %s\n", GIT_DATE); } void print_run_flags(FILE *fptr, struct Data *data, struct Prior *prior) { diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..4a66aea7e9ffc1d00d2e3f10c3de89e76d6feacd --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,175 @@ +# -- C library -------------- + +# library version | the rules for shared library version are complicated, +# the only very important thing is that if the ABI +# changes in a backwards-incompatible way, you should +# increment the MAJOR version number (and probably reset +# the others) +set(BAYESWAVE_VERSION_MAJOR 1) +set(BAYESWAVE_VERSION_MINOR 0) +set(BAYESWAVE_VERSION_PATCH 3) +set(BAYESWAVE_VERSION_STRING + ${BAYESWAVE_VERSION_MAJOR}.${BAYESWAVE_VERSION_MINOR}.${BAYESWAVE_VERSION_PATCH}) + +# find headers +pkg_check_modules(GSL REQUIRED "gsl") +pkg_check_modules(FFTW REQUIRED "fftw3") +pkg_check_modules(fftw3f REQUIRED "fftw3f") +pkg_check_modules(LIBFRAME REQUIRED "libframe") +pkg_check_modules(LIBMETAIO REQUIRED "libmetaio") +pkg_check_modules(LAL REQUIRED "lal") +pkg_check_modules(LALSUPPORT REQUIRED "lalsupport") +pkg_check_modules(LALFRAME REQUIRED "lalframe") +pkg_check_modules(LALINFERENCE REQUIRED "lalinference") +pkg_check_modules(LALINSPIRAL REQUIRED "lalinspiral") # REALLY? +pkg_check_modules(LALMETAIO REQUIRED "lalmetaio") +pkg_check_modules(LALSIMULATION REQUIRED "lalsimulation") + +# -- VCS info -------- + +execute_process(COMMAND + "${GIT_EXECUTABLE}" config --get remote.origin.url + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + OUTPUT_VARIABLE GIT_URL + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) +message(STATUS "GIT_URL is ${GIT_URL}") +execute_process(COMMAND + "${GIT_EXECUTABLE}" describe --dirty --always --tags + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + OUTPUT_VARIABLE GIT_VER + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) +message(STATUS "GIT_VER is ${GIT_VER}") +execute_process(COMMAND + "${GIT_EXECUTABLE}" log -1 --format=%H + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + OUTPUT_VARIABLE GIT_HASH + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) +message(STATUS "GIT_HASH is ${GIT_HASH}") +execute_process(COMMAND + "${GIT_EXECUTABLE}" log -1 --format=%ae + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + OUTPUT_VARIABLE GIT_AUTHOR + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) +message(STATUS "GIT_AUTHOR is ${GIT_AUTHOR}") +execute_process(COMMAND + "${GIT_EXECUTABLE}" log -1 --format=%ad + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + OUTPUT_VARIABLE GIT_DATE + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) +message(STATUS "GIT_DATE is ${GIT_DATE}") +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.in + ${CMAKE_CURRENT_SOURCE_DIR}/version.h @ONLY) + +# define library +set( + BAYESWAVE_HEADERS + version.h + BayesLine.h + BayesWave.h + BayesWaveEvidence.h + BayesWaveIO.h + BayesWaveLikelihood.h + BayesWaveMCMC.h + BayesWaveMath.h + BayesWaveModel.h + BayesWavePrior.h + BayesWaveProposal.h + BayesWaveWavelet.h +) +add_library( + libbayeswave SHARED + BayesLine.c + BayesWaveIO.c + BayesWaveMath.c + BayesWaveModel.c + BayesWaveWavelet.c + BayesWavePrior.c + BayesWaveLikelihood.c + BayesWaveProposal.c + BayesWaveEvidence.c + BayesWaveMCMC.c +) +target_include_directories(libbayeswave PRIVATE + ${GSL_INCLUDE_DIRS} + ${FFTW_INCLUDE_DIRS} + ${FFTW3F_INCLUDE_DIRS} + ${LIBFRAME_INCLUDE_DIRS} + ${LIBMETAIO_INCLUDE_DIRS} + ${LAL_INCLUDE_DIRS} + ${LALSUPPORT_INCLUDE_DIRS} + ${LALFRAME_INCLUDE_DIRS} + ${LALINFERENCE_INCLUDE_DIRS} + ${LALINSPIRAL_INCLUDE_DIRS} + ${LALMETAIO_INCLUDE_DIRS} + ${LALSIMULATION_INCLUDE_DIRS} + ) +target_link_libraries(libbayeswave + m + gsl + fftw3 + fftw3f + Frame + lal + lalsupport + lalframe + lalinference + lalinspiral + lalmetaio + lalsimulation + ) +set_target_properties( + libbayeswave PROPERTIES + OUTPUT_NAME bayeswave + VERSION ${BAYESWAVE_VERSION_STRING} + SOVERSION ${BAYESWAVE_VERSION_MAJOR} + PUBLIC_HEADER "${BAYESWAVE_HEADERS}" +) +set_property(TARGET libbayeswave PROPERTY C_STANDARD 11) + +# install +install( + TARGETS libbayeswave + RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +# -- executables -------- +add_executable(BayesWave BayesWave.c) +target_link_libraries(BayesWave libbayeswave) +set_property(TARGET BayesWave PROPERTY C_STANDARD 11) + +add_executable(BayesWavePost BayesWavePost.c) +target_link_libraries(BayesWavePost libbayeswave) +set_property(TARGET BayesWavePost PROPERTY C_STANDARD 11) + +add_executable(BayesWaveCleanFrame BayesWaveCleanFrame.c) +target_link_libraries(BayesWaveCleanFrame libbayeswave) +set_property(TARGET BayesWaveCleanFrame PROPERTY C_STANDARD 11) + +add_executable(BayesWaveToLALPSD BayesWaveToLALPSD.c) +target_link_libraries(BayesWaveToLALPSD libbayeswave) +set_property(TARGET BayesWaveToLALPSD PROPERTY C_STANDARD 11) + +install( + TARGETS + BayesWave + BayesWavePost + BayesWaveCleanFrame + BayesWaveToLALPSD + DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +# -- pkgconfig -------------- + +# install pkgconfig file +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc.in" + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" + @ONLY +) +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig +) diff --git a/src/bayeswave.pc.in b/src/bayeswave.pc.in new file mode 100644 index 0000000000000000000000000000000000000000..10ba9c0c6baea2b6925ae929ec19219d593a5717 --- /dev/null +++ b/src/bayeswave.pc.in @@ -0,0 +1,11 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: @PROJECT_NAME@ +Description: @PROJECT_DESCRIPTION@ +Version: @PROJECT_VERSION@ +Libs: -L${libdir} -llibbayeswave +Libs.private: -L${libdir} -lgsl -lfftw3 -lfftwf -lFrame -llal -llalsupport -llalframe -llalinference -llalinspiral -llalmetaio -llalsimulation +Cflags: -I${includedir} diff --git a/src/version.h.in b/src/version.h.in new file mode 100644 index 0000000000000000000000000000000000000000..b130111a3d731aeacddb670e3e91bc9fc774d42c --- /dev/null +++ b/src/version.h.in @@ -0,0 +1,9 @@ +/* Git VCS info + * Define macros for substitution by cmake. Macros used in BayesWaveIO.c. + * Copyright (C) 2019 James A. Clark <james.clark@ligo.org> + */ +#define GIT_URL "@GIT_URL@" +#define GIT_VER "@GIT_VER@" +#define GIT_HASH "@GIT_HASH@" +#define GIT_AUTHOR "@GIT_AUTHOR@" +#define GIT_DATE "@GIT_DATE@"