diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..629369b76 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,188 @@ +cmake_minimum_required (VERSION 2.8.9) + +project (map65 C CXX Fortran) + +set (MAP65_VERSION_MAJOR 1) +set (MAP65_VERSION_MINOR 3) + +if (POLICY CMP0020) + cmake_policy (SET CMP0020 NEW) # link to Qt winmain on Windows +endif (POLICY CMP0020) + +# make sure that the default is a RELEASE +if (NOT CMAKE_BUILD_TYPE) + set (CMAKE_BUILD_TYPE RELEASE CACHE STRING + "Choose the type of build, options are: None Debug Release." + FORCE) +endif (NOT CMAKE_BUILD_TYPE) + +# C++ setup + +set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") +set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") + +set (CXXSRCS + about.cpp + astro.cpp + bandmap.cpp + devsetup.cpp + displaytext.cpp + getdev.cpp + getfile.cpp + main.cpp + mainwindow.cpp + messages.cpp + meterwidget.cpp + plotter.cpp + set570.cpp + signalmeter.cpp + soundin.cpp + soundout.cpp + txtune.cpp + widegraph.cpp + ) + +if (WIN32) + set (CXXSRCS ${CXXSRCS} killbyname.cpp) +endif (WIN32) + +set (CSRCS + paInputDevice.c + pa_get_device_info.c +) + +set_property (SOURCE ${CXXSRCS} ${CSRCS} APPEND PROPERTY COMPILE_FLAGS "-include map65_config.h") + +set (UISRCS + about.ui + astro.ui + bandmap.ui + devsetup.ui + mainwindow.ui + messages.ui + txtune.ui + widegraph.ui +) + +# sort out pre-requisites + +# libfftw3 setup + +find_path (fftw3f_INCLUDES fftw3.f) +find_library (fftw3f_LIBRARIES NAMES fftw3f fftw3f-3) +include_directories (${fftw3f_INCLUDES}) + +if (WIN32) + find_library (usb_RUNTIME NAMES usb0 PATH_SUFFIXES bin) +endif (WIN32) + +# Qt5 setup + +# Widgets finds its own dependencies. +find_package (Qt5Widgets REQUIRED) +find_package (Qt5Multimedia REQUIRED) + +# Tell CMake to run moc when necessary +set (CMAKE_AUTOMOC ON) + +# don't use Qt "keywords" signal, slot, emit in generated files to +# avoid compatability issue with other libraries +#ADD_DEFINITIONS (-DQT_NO_KEYWORDS) + +# As moc files are generated in the binary dir, tell CMake to always +# look for includes there: +set (CMAKE_INCLUDE_CURRENT_DIR ON) + +# project definitions +add_definitions (-DQT5) +if (CMAKE_HOST_UNIX) + add_definitions (-DUNIX) +elseif (CMAKE_HOST_WIN32) + add_definitions (-DWIN32) +endif () + +set_property (DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE QT_NO_DEBUG_OUTPUT QT_NO_WARNING_OUTPUT) + +# build the subdirectories +add_subdirectory (libm65) + +# fetch kvasd + +if (APPLE) + set (kvasd_NAME http://svn.berlios.de/wsvn/wsjt/trunk/KVASD_gfortran_Mac${CMAKE_EXECUTABLE_SUFFIX}) +else () + set (kvasd_NAME http://www.physics.princeton.edu/pulsar/K1JT/kvasd${CMAKE_EXECUTABLE_SUFFIX}) +endif () +file ( + DOWNLOAD ${kvasd_NAME} contrib/kvasd${CMAKE_EXECUTABLE_SUFFIX} + STATUS kvasd_STATUS + LOG kvasd_LOG + SHOW_PROGRESS + ) +message (${kvasd_LOG}) +list (GET kvasd_STATUS 0 kvasd_RC) +if (!kvasd_RC) + message (FATAL_ERROR "${kvasd_STATUS}") +endif (!kvasd_RC) +add_custom_target (kvasd DEPENDS contrib/kvasd${CMAKE_EXECUTABLE_SUFFIX}) + +# UI generation +qt5_wrap_ui (GENUISRCS ${UISRCS}) + +add_executable (map65 ${CXXSRCS} ${CSRCS} ${GENUISRCS} map65.rc) +target_link_libraries (map65 m65impl ${fftw3f_LIBRARIES} C:/wsjt-env/src/map65/palir-02.dll C:/wsjt-env/src/map65/libusb.a C:/wsjt-env/src/map65/libwsock32.a ) + +if (WIN32) + target_link_libraries (map65) +endif (WIN32) +add_dependencies (map65 kvasd) +qt5_use_modules (map65 Widgets Multimedia OpenGL) + + +install ( + TARGETS map65 + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ) + +# install (DIRECTORY Palettes DESTINATION bin PATTERN *.pal) +# install (DIRECTORY samples DESTINATION bin/save) + +install (FILES +# CALL3.TXT +# prefixes.txt + DESTINATION bin + ) + +install ( + PROGRAMS ${CMAKE_BINARY_DIR}/contrib/kvasd${CMAKE_EXECUTABLE_SUFFIX} + DESTINATION bin +) + +if (WIN32) + install ( + FILES ${fftw3f_LIBRARIES} ${usb_RUNTIME} + DESTINATION bin COMPONENT Runtime + ) +endif (WIN32) + + +# a custom target that is always built +ADD_CUSTOM_TARGET (revisiontag ALL) + +# creates svnversion.h using cmake script +ADD_CUSTOM_COMMAND (TARGET revisiontag COMMAND ${CMAKE_COMMAND} + -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/getsvn.cmake) + +# explicitly say that the executable depends on custom target +add_dependencies(map65 revisiontag) + +# versioning + +configure_file ( + "${PROJECT_SOURCE_DIR}/map65_config.h.in" + "${PROJECT_BINARY_DIR}/map65_config.h" + ) + +include_directories ("${PROJECT_BINARY_DIR}") diff --git a/getsvn.cmake b/getsvn.cmake new file mode 100644 index 000000000..d1007b2c4 --- /dev/null +++ b/getsvn.cmake @@ -0,0 +1,16 @@ +find_package (Subversion) +if (Subversion_FOUND AND EXISTS ${PROJECT_SOURCE_DIR}/.svn) + # the FindSubversion.cmake module is part of the standard distribution + include (FindSubversion) + # extract working copy information for SOURCE_DIR into MY_XXX variables + Subversion_WC_INFO (${SOURCE_DIR} MY) + # write a file with the SVNVERSION define + file (WRITE svnversion.h.txt "#define SVNVERSION ${MY_WC_REVISION}\n") +else (Subversion_FOUND AND EXISTS ${PROJECT_SOURCE_DIR}/.svn) + file (WRITE svnversion.h.txt "#define SVNVERSION local\n") +endif (Subversion_FOUND AND EXISTS ${PROJECT_SOURCE_DIR}/.svn) + +# copy the file to the final header only if the version changes +# reduces needless rebuilds +execute_process (COMMAND ${CMAKE_COMMAND} -E copy_if_different + svnversion.h.txt svnversion.h) diff --git a/libm65/CMakeLists.txt b/libm65/CMakeLists.txt new file mode 100644 index 000000000..685f96854 --- /dev/null +++ b/libm65/CMakeLists.txt @@ -0,0 +1,177 @@ +cmake_minimum_required (VERSION 2.8.8) + +project (libm65 C CXX Fortran) + +if (POLICY CMP0020) + cmake_policy (SET CMP0020 NEW) # link to Qt winmain on Windows +endif (POLICY CMP0020) + +# make sure that the default is a RELEASE +if (NOT CMAKE_BUILD_TYPE) + set (CMAKE_BUILD_TYPE RELEASE CACHE STRING + "Choose the type of build, options are: None Debug Release." + FORCE) +endif (NOT CMAKE_BUILD_TYPE) + +set (CMAKE_POSITION_INDEPENDENT_CODE ON) + +# Fortran setup + +# FFLAGS depend on the compiler +get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME) + +if (Fortran_COMPILER_NAME MATCHES "gfortran.*") + # gfortran + set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-all-loops -fno-f2c -O3") + set (CMAKE_Fortran_FLAGS_DEBUG "-fno-f2c -O0 -g") +elseif (Fortran_COMPILER_NAME MATCHES "ifort.*") + # ifort (untested) + set (CMAKE_Fortran_FLAGS_RELEASE "-f77rtl -O3") + set (CMAKE_Fortran_FLAGS_DEBUG "-f77rtl -O0 -g") +elseif (Fortran_COMPILER_NAME MATCHES "g77") + # g77 + set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-all-loops -fno-f2c -O3 -m32") + set (CMAKE_Fortran_FLAGS_DEBUG "-fno-f2c -O0 -g -m32") +else (Fortran_COMPILER_NAME MATCHES "gfortran.*") + message ("CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER}) + message ("Fortran compiler: " ${Fortran_COMPILER_NAME}) + message ("No optimized Fortran compiler flags are known, we just try -O2...") + set (CMAKE_Fortran_FLAGS_RELEASE "-O2") + set (CMAKE_Fortran_FLAGS_DEBUG "-O0 -g") +endif (Fortran_COMPILER_NAME MATCHES "gfortran.*") + +# C++ setup + +if (UNIX) + SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") +endif (UNIX) + +# setup and test Fortran C/C++ interaction + +include (FortranCInterface) +FortranCInterface_VERIFY (CXX QUIET) +FortranCInterface_HEADER (FC.h MACRO_NAMESPACE "FC_" SYMBOL_NAMESPACE "FC_" + SYMBOLS ) + + +set (FSRCS + astro0.f90 + astrosub.f90 + ccf65.f90 + cgen65.f90 + decode0.f90 + decode1a.f90 + deep65.f90 + display.f90 + dpol.f90 + four2a.f90 + ftninit.f90 + ftnquit.f90 + gen65.f90 + getdphi.f90 + iqcal.f90 + iqfix.f90 + jt65code.f90 + map65a.f90 + noisegen.f90 + recvpkt.f90 + rfile3a.f90 + s3avg.f90 + sec_midn.f90 + sleep_msec.f90 + symspec.f90 + timer.f90 + timf2.f90 + tm2.f90 + zplot.f90 + + afc65b.f + astro.f + ccf2.f + chkhist.f + chkmsg.f + coord.f + dcoord.f + decode65b.f + deg2grid.f + demod64a.f + dot.f + encode65.f + extract.F + f77_wisdom.f + fchisq.f + fil6521.f + filbig.f + geocentric.f + getpfx1.f + getpfx2.f + graycode.f + grid2deg.f + grid2k.f + indexx.f + interleave63.f + k2grid.f + moon2.f + moondop.f + nchar.f + packcall.f + packdxcc.f + packgrid.f + packmsg.f + packtext.f + pctile.f + pfxdump.f + set.f + setup65.f + sort.f + ssort.f + sun.f + toxyz.f + trimlist.f + twkfreq.f + unpackcall.f + unpackgrid.f + unpackmsg.f + unpacktext.f + ) + +set (CSRCS + cutil.c + decode_rs.c + encode_rs.c + gran.c + igray.c + init_rs.c + tmoonsub.c + wrapkarn.c +) + +if (WIN32) + set (CSRCS ${CSRCS} ptt.c) +else (set (CSRCS ${CSRCS} ptt_unix.c)) +endif (WIN32) + +set (CXXSRCS + ipcomm.cpp + ) + +add_definitions (-DBIGSYM=1) +set_source_files_properties (sec_midn.f90 PROPERTIES COMPILE_FLAGS -fno-second-underscore) + + +# +# build our targets +# +add_library (m65impl STATIC ${FSRCS} ${CSRCS} ${CXXSRCS}) +qt5_use_modules (m65impl Core) + +add_executable (m65 m65.f90 m65a.f90) +target_link_libraries (m65 m65impl ${fftw3f_LIBRARIES}) +add_dependencies (m65 fftw3f) +qt5_use_modules (m65 Core) + +install ( + TARGETS m65 + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ) diff --git a/libm65/JT65code.f90 b/libm65/jt65code.f90 similarity index 100% rename from libm65/JT65code.f90 rename to libm65/jt65code.f90 diff --git a/libm65/timeval.h b/libm65/timeval.h index 100dda5ac..83c77d5a1 100644 --- a/libm65/timeval.h +++ b/libm65/timeval.h @@ -27,10 +27,12 @@ // long tv_usec; /* microseconds */ //}; +/* struct timezone { - int tz_minuteswest; /* minutes W of Greenwich */ - int tz_dsttime; /* type of dst correction */ + int tz_minuteswest; // minutes W of Greenwich +int tz_dsttime; // type of dst correction }; +*/ __inline int gettimeofday(struct timeval *tv, struct timezone *tz) { diff --git a/map65_config.h.in b/map65_config.h.in new file mode 100644 index 000000000..ffb971758 --- /dev/null +++ b/map65_config.h.in @@ -0,0 +1,4 @@ +#include "svnversion.h" + +#define MAP65_VERSION_MAJOR @MAP65_VERSION_MAJOR@ +#define MAP65_VERSION_MINOR @MAP65_VERSION_MINOR@ diff --git a/palir-02.dll b/palir-02.dll new file mode 100644 index 000000000..925939d3d Binary files /dev/null and b/palir-02.dll differ