# Meson file for CrystFEL project('crystfel', 'c', version: '0.10.1', license: 'GPL3+', meson_version: '>=0.55.0', default_options: ['buildtype=debugoptimized']) libcrystfel_api_version = 15 add_project_arguments('-DHAVE_CONFIG_H', language: 'c') versionc = vcs_tag(input: 'src/version.c.in', output: 'version.c') conf_data = configuration_data() # Mandatory dependencies cc = meson.get_compiler('c') mdep = cc.find_library('m', required: true) gsldep = dependency('gsl', required: true) pthreaddep = dependency('threads', required: true) # Try via pkg-config first: slurmdep = dependency('slurm', required: false) if not slurmdep.found() slurmdep = cc.find_library('slurm', has_headers: 'slurm/slurm.h', required: false) endif if slurmdep.found() conf_data.set10('HAVE_SLURM', 1) endif # Find HDF5 using inbuilt Meson methods. Requires Meson >= 0.50.0 hdf5dep = dependency('hdf5', language: 'c', required: get_option('hdf5')) if hdf5dep.found() conf_data.set10('HAVE_HDF5', 1) # Request HDF5 1.10-style API add_project_arguments('-DH5_USE_110_API', language: 'c') add_project_arguments('-DH5O_GET_INFO_BY_IDX1', language: 'c') endif fftwdep = dependency('fftw3', required: false) if fftwdep.found() conf_data.set10('HAVE_FFTW', 1) endif gtkdep = dependency('gtk+-3.0', required: false) if gtkdep.found() add_project_arguments('-Wno-deprecated-declarations', language: 'c') conf_data.set10('HAVE_GTK', 1) endif gdkdep = dependency('gdk-3.0', required: false) if gdkdep.found() conf_data.set10('HAVE_GDK', 1) endif gdkpixbufdep = dependency('gdk-pixbuf-2.0', required: false) if gdkpixbufdep.found() conf_data.set10('HAVE_GDKPIXBUF', 1) endif cairodep = dependency('cairo', required: false) if cairodep.found() conf_data.set10('HAVE_CAIRO', 1) endif opencldep = dependency('OpenCL', required: false) if opencldep.found() conf_data.set10('HAVE_OPENCL', 1) endif if cc.has_header('CL/cl.h', dependencies: opencldep) conf_data.set10('HAVE_CL_CL_H', 1) endif zmqdep = dependency('libzmq', required: false) if zmqdep.found() conf_data.set10('HAVE_ZMQ', 1) endif if cc.has_function('clock_gettime', prefix: '#include ') conf_data.set10('HAVE_CLOCK_GETTIME', 1) endif # ************************ libcrystfel (subdir) ************************ subdir('libcrystfel') # ************************ The programs ************************ configure_file(input: 'config.h.in', output: 'config.h', configuration: conf_data) conf_inc = include_directories('.') # cell_tool executable('cell_tool', ['src/cell_tool.c', versionc], dependencies: [mdep, libcrystfeldep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') # partial_sim executable('partial_sim', ['src/partial_sim.c', versionc], dependencies: [mdep, libcrystfeldep, gsldep, pthreaddep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') # process_hkl process_hkl = executable('process_hkl', ['src/process_hkl.c', versionc], dependencies: [mdep, libcrystfeldep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') # list_events executable('list_events', ['src/list_events.c', versionc], dependencies: [mdep, libcrystfeldep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') # get_hkl executable('get_hkl', ['src/get_hkl.c', versionc], dependencies: [mdep, libcrystfeldep, gsldep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') # compare_hkl executable('compare_hkl', ['src/compare_hkl.c', versionc], dependencies: [mdep, libcrystfeldep, gsldep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') # check_hkl executable('check_hkl', ['src/check_hkl.c', versionc], dependencies: [mdep, libcrystfeldep, gsldep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') # partialator partialator = executable('partialator', ['src/partialator.c', 'src/post-refinement.c', 'src/merge.c', 'src/rejection.c', 'src/scaling.c', versionc], dependencies: [mdep, libcrystfeldep, gsldep, pthreaddep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') # ambigator executable('ambigator', ['src/ambigator.c', versionc], dependencies: [mdep, libcrystfeldep, gsldep, hdf5dep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') # whirligig executable('whirligig', ['src/whirligig.c', versionc], dependencies: [mdep, libcrystfeldep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') # indexamajig indexamajig_sources = ['src/indexamajig.c', 'src/im-sandbox.c', 'src/process_image.c', versionc] if zmqdep.found() indexamajig_sources += ['src/im-zmq.c'] endif indexamajig = executable('indexamajig', indexamajig_sources, dependencies: [mdep, libcrystfeldep, gsldep, pthreaddep, zmqdep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') # make_pixelmap if hdf5dep.found() executable('make_pixelmap', ['src/make_pixelmap.c', versionc], dependencies: [mdep, libcrystfeldep, hdf5dep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') endif # geoptimiser # FIXME: restore #executable('geoptimiser', # ['src/geoptimiser.c', 'src/hdfsee-render.c', versionc], # dependencies: [mdep, libcrystfeldep, gsldep, gdkpixbufdep, gdkdep], # install: true, # install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') # CrystFEL GUI if gtkdep.found() gui_sources = ['src/crystfel_gui.c', 'src/crystfelimageview.c', 'src/crystfelindexingopts.c', 'src/crystfelmergeopts.c', 'src/crystfelsymmetryselector.c', 'src/gtk-util-routines.c', 'src/gui_import.c', 'src/gui_peaksearch.c', 'src/gui_index.c', 'src/gui_merge.c', 'src/gui_fom.c', 'src/gui_export.c', 'src/gui_ambi.c', 'src/gui_backend_local.c', 'src/gui_project.c', 'src/gtkmultifilechooserbutton.c', versionc] if slurmdep.found() gui_sources += 'src/gui_backend_slurm.c' endif executable('crystfel', gui_sources, dependencies: [mdep, libcrystfeldep, gtkdep, gsldep, slurmdep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') endif # render_hkl executable('render_hkl', ['src/render_hkl.c', versionc], dependencies: [mdep, libcrystfeldep, cairodep, gsldep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') # cell_explorer if gtkdep.found() executable('cell_explorer', ['src/cell_explorer.c', 'src/multihistogram.c', versionc], dependencies: [mdep, libcrystfeldep, gtkdep, gsldep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') endif # pattern_sim if hdf5dep.found() pattern_sim_sources = ['src/pattern_sim.c', 'src/diffraction.c', versionc] if opencldep.found() pattern_sim_sources += ['src/diffraction-gpu.c', 'src/cl-utils.c'] endif executable('pattern_sim', pattern_sim_sources, dependencies: [mdep, libcrystfeldep, gsldep, hdf5dep, opencldep], install: true, install_rpath: '$ORIGIN/../lib64/:$ORIGIN/../lib') endif # For testing (see tests/meson.build) simulation_bits = files(['src/diffraction.c', 'src/diffraction-gpu.c', 'src/cl-utils.c']) # ************************ Misc resources ************************ install_data(['data/crystfel.svg'], install_dir: get_option('datadir')+'/icons/hicolor/scalable/apps') # ************************ Testing ************************ subdir('tests') # ************************ Manual pages ************************ install_man(['doc/man/ambigator.1', 'doc/man/cell_explorer.1', 'doc/man/cell_tool.1', 'doc/man/check_hkl.1', 'doc/man/compare_hkl.1', 'doc/man/crystfel.7', 'doc/man/crystfel_geometry.5', 'doc/man/geoptimiser.1', 'doc/man/get_hkl.1', 'doc/man/indexamajig.1', 'doc/man/list_events.1', 'doc/man/list_events.1', 'doc/man/make_pixelmap.1', 'doc/man/partialator.1', 'doc/man/partial_sim.1', 'doc/man/pattern_sim.1', 'doc/man/process_hkl.1', 'doc/man/render_hkl.1', 'doc/man/whirligig.1'])