Index: trunk/FACT++/CMakeLists.txt
===================================================================
--- trunk/FACT++/CMakeLists.txt	(revision 20069)
+++ trunk/FACT++/CMakeLists.txt	(revision 20070)
@@ -28,6 +28,18 @@
 #SET(CMAKE_VERBOSE_MAKEFILE ON)
 
+# *********************************
+# ************ System *************
+# *********************************
+
+FIND_PROGRAM(LSB_RELEASE_EXE NAMES lsb_release)
+IF (DEFINED LSB_RELEASE_EXE)
+   EXECUTE_PROCESS(COMMAND ${LSB_RELEASE_EXE} -d OUTPUT_VARIABLE LSB_RELEASE OUTPUT_STRIP_TRAILING_WHITESPACE)
+   MESSAGE(STATUS ${LSB_RELEASE})
+ENDIF()
+
 MESSAGE(STATUS "CMake Version " ${CMAKE_VERSION})
 
+
+
 # *********************************
 # ************ Project ************
@@ -40,5 +52,7 @@
 PROJECT(fact++ VERSION ${VERSION})
 
-INCLUDE(GNUInstallDirs)
+# *************************************
+# ************ Some checks  ***********
+# *************************************
 
 IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
@@ -74,14 +88,63 @@
 
 
-# ======== For config.h.in =========
-SET(PACKAGE_MAINTAINER "Thomas Bretz")
-SET(PACKAGE_BUGREPORT  "tbretz@physik.rwth-aachen.de")
-SET(PACKAGE_URL        "https://www.fact-project.org")
-
-FIND_PROGRAM(LSB_RELEASE_EXE NAMES lsb_release)
-IF (DEFINED LSB_RELEASE_EXE)
-   EXECUTE_PROCESS(COMMAND ${LSB_RELEASE_EXE} -d OUTPUT_VARIABLE LSB_RELEASE OUTPUT_STRIP_TRAILING_WHITESPACE)
-   MESSAGE(STATUS ${LSB_RELEASE})
-ENDIF()
+# *************************************
+# ************ Installation ***********
+# *************************************
+
+INCLUDE(GNUInstallDirs)
+IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR CMAKE_INSTALL_PREFIX STREQUAL CMAKE_INSTALL_PREFIX_DEFAULT)
+    MESSAGE(STATUS "Install Prefix: " ${CMAKE_INSTALL_PREFIX} " <default>")
+    SET(CMAKE_INSTALL_PREFIX_DEFAULT ${CMAKE_INSTALL_PREFIX} CACHE INTERNAL "Default install prefix")
+ELSE()
+    MESSAGE(STATUS "Install Prefix: " ${CMAKE_INSTALL_PREFIX})
+ENDIF()
+
+# Compiling and installation with full RAPTH
+
+# Taken from
+# https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling
+
+# use, i.e. don't skip the full RPATH for the build tree
+SET(CMAKE_SKIP_BUILD_RPATH FALSE)
+# when building, don't use the install RPATH already
+# (but later on when installing)
+SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
+SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
+# add then automatically determined parts of the RPATH
+# which point to directories outside the build tree to the install RPATH
+SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+# the RPATH to be used when installing, but only if it's not a system directory
+#LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" IsSystemDir)
+#IF("${IsSystemDir}" STREQUAL "-1")
+#    SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
+#ENDIF()
+
+INSTALL(PROGRAMS start.sh DESTINATION ${CMAKE_INSTALL_BINDIR})
+
+# USAGE:
+#   INSTALL_LINK(executable)
+#   INSTALL_LINK(executable link)
+FUNCTION(INSTALL_LINK)
+
+    IF (NOT CMAKE_INSTALL_PREFIX STREQUAL CMAKE_INSTALL_PREFIX_DEFAULT)
+
+        LIST(LENGTH ARGN LIST_COUNT)
+        IF (LIST_COUNT GREATER 2)
+            MESSAGE(FATAL_ERROR "LINK only suppted with a maximum of two arguments")
+        ENDIF()
+
+        LIST(GET ARGN 0 executable)
+        IF (LIST_COUNT EQUAL 1)
+            LIST(GET ARGN 0 link)
+        ELSE()
+            LIST(GET ARGN 1 link)
+        ENDIF()
+
+        INSTALL(CODE "MESSAGE(STATUS \"Creating symlink for ${executable}\")")
+        INSTALL(CODE "EXECUTE_PROCESS(COMMAND ln -sf bin/${link} ${executable} WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX})")
+    ENDIF()
+
+ENDFUNCTION()
+
 
 # *********************************
@@ -436,5 +499,5 @@
 # *********************************
 
-SET(CMAKE_CXX_STANDARD 11)
+#SET(CMAKE_CXX_STANDARD 11)
 SET(CMAKE_C_STANDARD   99)
 
@@ -469,4 +532,14 @@
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic -DMIPSEL -DPROTOCOL=1 -Dunix -Dlinux")
 
+
+# ======== For config.h.in =========
+SET(PACKAGE_MAINTAINER "Thomas Bretz")
+SET(PACKAGE_BUGREPORT  "tbretz@physik.rwth-aachen.de")
+SET(PACKAGE_URL        "https://www.fact-project.org")
+
+
+# ********************************************************
+# ******************** Compilation ***********************
+# ********************************************************
 
 # -------------------------------------------------------
@@ -526,4 +599,5 @@
 	erfa/src/tr.c		erfa/src/falp03.c)
 TARGET_LINK_LIBRARIES(Pointing PUBLIC m)
+INSTALL(TARGETS Pointing)
 
 # ======================= libDim.so ======================
@@ -549,4 +623,6 @@
 	dim/src/utilities.c)
 
+INSTALL(TARGETS Dim)
+
 # ================= libDimExtension.so ===================
 ADD_LIBRARY(DimExtension SHARED
@@ -555,4 +631,5 @@
 TARGET_LINK_LIBRARIES(DimExtension PUBLIC
         Boost::system)
+INSTALL(TARGETS DimExtension)
 
 # ===================== libDim++.so ======================
@@ -572,4 +649,5 @@
 	dim/src/tokenstring.cxx)
 TARGET_LINK_LIBRARIES(Dim++ PUBLIC Dim)
+INSTALL(TARGETS Dim++)
 
 # ================= libStateMachine.so ===================
@@ -612,4 +690,5 @@
         Boost::filesystem
         OpenSSL::SSL)
+INSTALL(TARGETS StateMachine)
 
 ENDIF (NOT TOOLS_ONLY AND NOT VIEWER_ONLY)
@@ -625,4 +704,5 @@
         Boost::program_options
         ${MYSQL_LIBRARY} ${MYSQLPP_LIBRARY})
+INSTALL(TARGETS Configuration)
 
 # ===================== libTime.so =======================
@@ -630,8 +710,10 @@
 	src/Time.h src/Time.cc)
 TARGET_LINK_LIBRARIES(Time PUBLIC ${NOVA_LIBRARY})
+INSTALL(TARGETS Time)
 
 # ===================== libTools.so ======================
 ADD_LIBRARY(Tools SHARED
 	src/tools.h src/tools.cc)
+INSTALL(TARGETS Tools)
 
 
@@ -731,4 +813,6 @@
    ADD_EXECUTABLE(fitsdump src/fitsdump.cc)
    TARGET_LINK_LIBRARIES(fitsdump ${HELP++LIBS} ${ROOT_LIBRARIES} ZLIB::ZLIB)
+   INSTALL(TARGETS fitsdump)
+   INSTALL_LINK(fitsdump)
    MANPAGE(fitsdump "FACT++ - fitsdump - Read and dump contents of a FITStable")
    # This is a hack to suppress warnings from root headers (-isystem)
@@ -737,4 +821,6 @@
    ADD_EXECUTABLE(rootifysql src/rootifysql.cc)
    TARGET_LINK_LIBRARIES(rootifysql ${HELP++LIBS} OpenSSL::SSL ${ROOT_LIBRARIES})
+   INSTALL(TARGETS rootifysql)
+   INSTALL_LINK(rootifysql)
    MANPAGE(rootifysql "FACT++ - rootifysql - Write result of a SQL query into a root-file")
    # This is a hack to suppress warnings from root headers (-isystem)
@@ -743,4 +829,6 @@
    ADD_EXECUTABLE(root2sql src/root2sql.cc)
    TARGET_LINK_LIBRARIES(root2sql ${HELP++LIBS} OpenSSL::SSL ${MYSQLPP_LIBRARY} ${ROOT_LIBRARIES})
+   INSTALL(TARGETS root2sql)
+   INSTALL_LINK(root2sql)
    MANPAGE(root2sql "FACT++ - root2sql - Fill contents of a root-tree into a MySQL database")
    # This is a hack to suppress warnings from root headers (-isystem)
@@ -749,4 +837,6 @@
    ADD_EXECUTABLE(root2csv src/root2csv.cc)
    TARGET_LINK_LIBRARIES(root2csv ${HELP++LIBS} ${ROOT_LIBRARIES})
+   INSTALL(TARGETS root2csv)
+   INSTALL_LINK(root2csv)
    MANPAGE(root2csv "FACT++ - root2csv - Convert a root-tree to a csv file")
    # This is a hack to suppress warnings from root headers (-isystem)
@@ -755,4 +845,6 @@
    ADD_EXECUTABLE(csv2root src/csv2root.cc)
    TARGET_LINK_LIBRARIES(csv2root ${HELP++LIBS} ${ROOT_LIBRARIES})
+   INSTALL(TARGETS csv2root)
+   INSTALL_LINK(csv2root)
    MANPAGE(csv2root "FACT++ - csv2root - Convert a csv file to a root-tree")
    # This is a hack to suppress warnings from root headers (-isystem)
@@ -762,20 +854,30 @@
 ADD_EXECUTABLE(fits2sql src/fits2sql.cc)
 TARGET_LINK_LIBRARIES(fits2sql ${HELP++LIBS}  ZLIB::ZLIB)
+INSTALL(TARGETS fits2sql)
+INSTALL_LINK(fits2sql)
 MANPAGE(fits2sql "FACT++ - fits2sql - Fill contents of a FITS table into a MySQL database")
 
 ADD_EXECUTABLE(corsika2sql src/corsika2sql.cc)
 TARGET_LINK_LIBRARIES(corsika2sql ${HELP++LIBS})
+INSTALL(TARGETS corsika2sql)
+INSTALL_LINK(corsika2sql)
 MANPAGE(corsika2sql "Fills a Corsika Input Card into a SQL table")
 
 ADD_EXECUTABLE(showlog src/showlog.cc src/WindowLog.cc)
 TARGET_LINK_LIBRARIES(showlog Threads::Threads ${HELP++LIBS} ${CURSES_LIBRARIES})
+INSTALL(TARGETS showlog)
+INSTALL_LINK(showlog)
 MANPAGE(showlog "")
 
 ADD_EXECUTABLE(zfits src/zfits.cc)
 TARGET_LINK_LIBRARIES(zfits ${HELP++LIBS} ZLIB::ZLIB)
+INSTALL(TARGETS zfits)
+INSTALL_LINK(zfits)
 MANPAGE(zfits "")
 
 ADD_EXECUTABLE(fixfits src/fixfits.cc)
 TARGET_LINK_LIBRARIES(fixfits ${HELP++LIBS} ZLIB::ZLIB)
+INSTALL(TARGETS fixfits)
+INSTALL_LINK(fixfits)
 MANPAGE(fixfits "FACT++ - fixfits - Fix the header of a none closed raw-data file")
 
@@ -783,4 +885,6 @@
    ADD_EXECUTABLE(calcsource src/calcsource.cc)
    TARGET_LINK_LIBRARIES(calcsource ${HELP++LIBS} ${ROOT_LIBRARIES})
+   INSTALL(TARGETS calcsource)
+   INSTALL_LINK(calcsource)
    MANPAGE(calcsource "")
    # This is a hack to suppress warnings from root headers (-isystem)
@@ -789,4 +893,6 @@
    ADD_EXECUTABLE(calcsourcemc src/calcsourcemc.cc)
    TARGET_LINK_LIBRARIES(calcsourcemc ${HELP++LIBS} ${ROOT_LIBRARIES})
+   INSTALL(TARGETS calcsourcemc)
+   INSTALL_LINK(calcsourcemc)
    MANPAGE(calcsourcemc "")
    # This is a hack to suppress warnings from root headers (-isystem)
@@ -797,4 +903,7 @@
 TARGET_LINK_LIBRARIES(spectrum Threads::Threads ${CURSES_LIBRARIES} ${HIGHLIGHT_LIBRARY} ${HELP++LIBS} ${ROOT_LIBRARIES})
 ADD_RESOURCES(spectrum/analysis.sql spectrum/data.sql spectrum/simulation.sql spectrum/spectrum.sql spectrum/summary-est.sql spectrum/summary-sim.sql)
+INSTALL(TARGETS spectrum)
+INSTALL_LINK(spectrum)
+INSTALL(FILES spectrum/analysis.sql spectrum/data.sql spectrum/simulation.sql spectrum/spectrum.sql spectrum/summary-est.sql spectrum/summary-sim.sql DESTINATION share/sql)
 MANPAGE(spectrum "")
 # This is a hack to suppress warnings from root headers (-isystem)
@@ -803,4 +912,6 @@
 ADD_EXECUTABLE(getevent src/getevent.cc)
 TARGET_LINK_LIBRARIES(getevent ${HELP++LIBS} ZLIB::ZLIB Threads::Threads)
+INSTALL(TARGETS getevent)
+INSTALL_LINK(getevent)
 MANPAGE(getevent "")
 
@@ -811,5 +922,7 @@
 IF(NOT NO_ROOT)
    ADD_EXECUTABLE(makeplots src/makeplots.cc)
-   TARGET_LINK_LIBRARIES(makeplots  ${HELP++LIBS} ${ROOT_LIBRARIES})
+   TARGET_LINK_LIBRARIES(makeplots ${HELP++LIBS} ${ROOT_LIBRARIES})
+   INSTALL(TARGETS makeplots)
+   INSTALL_LINK(makeplots)
    # This is a hack to suppress warnings from root headers (-isystem)
    TARGET_INCLUDE_DIRECTORIES(makeplots SYSTEM PUBLIC ${ROOT_INCLUDE_DIRS})
@@ -819,12 +932,18 @@
 ADD_EXECUTABLE(makedata src/makedata.cc)
 TARGET_LINK_LIBRARIES(makedata ${HELP++LIBS})
+INSTALL(TARGETS makedata)
+INSTALL_LINK(makedata)
 MANPAGE(makedata "")
 
 ADD_EXECUTABLE(makeschedule src/makeschedule.cc)
 TARGET_LINK_LIBRARIES(makeschedule ${HELP++LIBS})
+INSTALL(TARGETS makeschedule)
+INSTALL_LINK(makeschedule)
 MANPAGE(makeschedule "")
 
 ADD_EXECUTABLE(moon src/moon.cc)
 TARGET_LINK_LIBRARIES(moon ${HELP++LIBS})
+INSTALL(TARGETS moon)
+INSTALL_LINK(moon)
 MANPAGE(moon "")
 
@@ -839,32 +958,48 @@
 ADD_EXECUTABLE(dns src/dns.c)
 TARGET_LINK_LIBRARIES(dns ${FACT++LIBS})
+INSTALL(TARGETS dns)
+INSTALL_LINK(dns)
 MANPAGE(dns "")
 
 ADD_EXECUTABLE(agilentctrl src/agilentctrl.cc)
 TARGET_LINK_LIBRARIES(agilentctrl ${FACT++LIBS})
+INSTALL(TARGETS agilentctrl)
+INSTALL_LINK(agilentctrl start.sh)
 MANPAGE(agilentctrl "")
 
 ADD_EXECUTABLE(biasctrl src/biasctrl.cc)
 TARGET_LINK_LIBRARIES(biasctrl ${FACT++LIBS})
+INSTALL(TARGETS biasctrl)
+INSTALL_LINK(biasctrl start.sh)
 MANPAGE(biasctrl "")
 
 ADD_EXECUTABLE(biastemp src/biastemp.cc)
 TARGET_LINK_LIBRARIES(biastemp ${FACT++LIBS})
+INSTALL(TARGETS biastemp)
+INSTALL_LINK(biastemp start.sh)
 MANPAGE(biastemp "")
 
 ADD_EXECUTABLE(gudectrl src/gudectrl.cc)
 TARGET_LINK_LIBRARIES(gudectrl ${FACT++LIBS})
+INSTALL(TARGETS gudectrl)
+INSTALL_LINK(gudectrl start.sh)
 MANPAGE(gudectrl "")
 
 ADD_EXECUTABLE(gtcdust src/gtcdust.cc)
 TARGET_LINK_LIBRARIES(gtcdust ${FACT++LIBS})
+INSTALL(TARGETS gtcdust)
+INSTALL_LINK(gtcdust start.sh)
 MANPAGE(gtcdust "")
 
 ADD_EXECUTABLE(chatserv src/chatserv.cc)
 TARGET_LINK_LIBRARIES(chatserv ${FACT++LIBS}) # does not require libpanel
+INSTALL(TARGETS chatserv)
+INSTALL_LINK(chatserv start.sh)
 MANPAGE(chatserv "")
 
 ADD_EXECUTABLE(chatclient src/chatclient.cc)
 TARGET_LINK_LIBRARIES(chatclient ${FACT++LIBS}) # does not require libpanel
+INSTALL(TARGETS chatclient)
+INSTALL_LINK(chatclient start.sh)
 MANPAGE(chatclient "")
 
@@ -878,4 +1013,6 @@
 	src/FitsFile.cc src/Fits.cc)
 TARGET_LINK_LIBRARIES(datalogger ${FACT++LIBS} cfitsio CCfits)
+INSTALL(TARGETS datalogger)
+INSTALL_LINK(datalogger start.sh)
 MANPAGE(datalogger "")
 
@@ -887,4 +1024,6 @@
         	src/DimState.cc)
 	TARGET_LINK_LIBRARIES(dimctrl ${FACT++LIBS} Pointing ZLIB::ZLIB v8)
+        INSTALL(TARGETS dimctrl)
+        INSTALL_LINK(dimctrl start.sh)
 	MANPAGE(dimctrl "")
 
@@ -893,12 +1032,19 @@
         	COMMENT "Creating symlink for dimserver"
 		DEPENDS dimctrl)
+
+        INSTALL(FILES ${CMAKE_BINARY_DIR}/dimserver DESTINATION ${CMAKE_INSTALL_BINDIR})
+        INSTALL_LINK(dimserver start.sh)
 ENDIF()
 
 ADD_EXECUTABLE(drivectrl src/drivectrl.cc)
 TARGET_LINK_LIBRARIES(drivectrl ${FACT++LIBS} Pointing)
+INSTALL(TARGETS drivectrl)
+INSTALL_LINK(drivectrl start.sh)
 MANPAGE(drivectrl "")
 
 ADD_EXECUTABLE(evtserver src/evtserver.cc)
 TARGET_LINK_LIBRARIES(evtserver ${FACT++LIBS} ZLIB::ZLIB)
+INSTALL(TARGETS evtserver)
+INSTALL_LINK(evtserver start.sh)
 MANPAGE(evtserver "")
 
@@ -912,75 +1058,117 @@
 	src/DataProcessorImp.cc)
 TARGET_LINK_LIBRARIES(fadctrl ${FACT++LIBS} cfitsio CCfits ZLIB::ZLIB)
+INSTALL(TARGETS fadctrl)
+INSTALL_LINK(fadctrl start.sh)
 MANPAGE(fadctrl "")
 
 ADD_EXECUTABLE(feedback src/feedback.cc)
 TARGET_LINK_LIBRARIES(feedback ${FACT++LIBS})
+INSTALL(TARGETS feedback)
+INSTALL_LINK(feedback start.sh)
 MANPAGE(feedback "")
 
 ADD_EXECUTABLE(fscctrl src/fscctrl.cc src/HeadersFTM.cc)
 TARGET_LINK_LIBRARIES(fscctrl ${FACT++LIBS})
+INSTALL(TARGETS fscctrl)
+INSTALL_LINK(fscctrl start.sh)
 MANPAGE(fscctrl "")
 
 ADD_EXECUTABLE(miniftmctrl src/miniftmctrl.cc)
 TARGET_LINK_LIBRARIES(miniftmctrl ${FACT++LIBS})
+INSTALL(TARGETS miniftmctrl)
+INSTALL_LINK(miniftmctrl start.sh)
 MANPAGE(miniftmctrl "")
+
+ADD_EXECUTABLE(fpgaftmctrl src/fpgaftmctrl.cc)
+TARGET_LINK_LIBRARIES(fpgaftmctrl ${FACT++LIBS})
+INSTALL(TARGETS fpgaftmctrl)
+INSTALL_LINK(fpgaftmctrl start.sh)
+MANPAGE(fpgaftmctrl "")
 
 IF(NOT FOUND_FAMOUS)
     ADD_EXECUTABLE(ftmctrl src/ftmctrl.cc src/HeadersFTM.cc)
     TARGET_LINK_LIBRARIES(ftmctrl ${FACT++LIBS})
+    INSTALL(TARGETS ftmctrl)
+    INSTALL_LINK(ftmctrl start.sh)
     MANPAGE(ftmctrl "")
 ELSE()
     ADD_CUSTOM_TARGET(ftmctrl ALL
-   	COMMAND ln -sf miniftmctrl ftmctrl
-      	COMMENT "Creating symlink for ftmctrl"
-	DEPENDS miniftmctrl)
+   	COMMAND ln -sf fpgaftmctrl ftmctrl
+      	COMMENT "Creating symlink for fpgaftmctrl"
+	DEPENDS fpgaftmctrl)
+    INSTALL(FILES ${CMAKE_BINARY_DIR}/fpgaftmctrl DESTINATION ${CMAKE_INSTALL_BINDIR})
+    INSTALL_LINK(fpgaftmctrl start.sh)
 ENDIF()
 
 ADD_EXECUTABLE(gcn src/gcn.cc)
 TARGET_LINK_LIBRARIES(gcn ${FACT++LIBS} ${Qt}::${QtXml})
+INSTALL(TARGETS gcn)
+INSTALL_LINK(gcn start.sh)
 MANPAGE(gcn "")
 
 ADD_EXECUTABLE(scheduler src/scheduler.cc)
 TARGET_LINK_LIBRARIES(scheduler ${FACT++LIBS})
+INSTALL(TARGETS scheduler)
+INSTALL_LINK(scheduler start.sh)
 MANPAGE(scheduler "")
 
 ADD_EXECUTABLE(gpsctrl src/gpsctrl.cc)
 TARGET_LINK_LIBRARIES(gpsctrl ${FACT++LIBS})
+INSTALL(TARGETS gpsctrl)
+INSTALL_LINK(gpsctrl start.sh)
 MANPAGE(gpsctrl "")
 
 ADD_EXECUTABLE(lidctrl src/lidctrl.cc)
 TARGET_LINK_LIBRARIES(lidctrl ${FACT++LIBS} ${Qt}::${QtXml})
+INSTALL(TARGETS lidctrl)
+INSTALL_LINK(lidctrl start.sh)
 MANPAGE(lidctrl "")
 
 ADD_EXECUTABLE(magiclidar src/magiclidar.cc)
 TARGET_LINK_LIBRARIES(magiclidar ${FACT++LIBS})
+INSTALL(TARGETS magiclidar)
+INSTALL_LINK(magiclidar start.sh)
 MANPAGE(magiclidar "")
 
 ADD_EXECUTABLE(magicweather src/magicweather.cc)
 TARGET_LINK_LIBRARIES(magicweather ${FACT++LIBS})
+INSTALL(TARGETS magicweather)
+INSTALL_LINK(magicweather start.sh)
 MANPAGE(magicweather "")
 
 ADD_EXECUTABLE(mcp src/mcp.cc)
 TARGET_LINK_LIBRARIES(mcp ${FACT++LIBS})
+INSTALL(TARGETS mcp)
+INSTALL_LINK(mcp start.sh)
 MANPAGE(mcp "")
 
 ADD_EXECUTABLE(pfminictrl src/pfminictrl.cc)
 TARGET_LINK_LIBRARIES(pfminictrl ${FACT++LIBS})
+INSTALL(TARGETS pfminictrl)
+INSTALL_LINK(pfminictrl start.sh)
 MANPAGE(pfminictrl "")
 
 ADD_EXECUTABLE(pwrctrl src/pwrctrl.cc src/HeadersPower.cc)
 TARGET_LINK_LIBRARIES(pwrctrl ${FACT++LIBS} ${Qt}::${QtXml})
+INSTALL(TARGETS pwrctrl)
+INSTALL_LINK(pwrctrl start.sh)
 MANPAGE(pwrctrl "")
 
 ADD_EXECUTABLE(rainsensor src/rainsensor.cc)
 TARGET_LINK_LIBRARIES(rainsensor ${FACT++LIBS})
+INSTALL(TARGETS rainsensor)
+INSTALL_LINK(rainsensor start.sh)
 MANPAGE(rainsensor "")
 
 ADD_EXECUTABLE(ratecontrol src/ratecontrol.cc)
 TARGET_LINK_LIBRARIES(ratecontrol ${FACT++LIBS})
+INSTALL(TARGETS ratecontrol)
+INSTALL_LINK(ratecontrol start.sh)
 MANPAGE(ratecontrol "")
 
 ADD_EXECUTABLE(ratescan src/ratescan.cc)
 TARGET_LINK_LIBRARIES(ratescan ${FACT++LIBS})
+INSTALL(TARGETS ratescan)
+INSTALL_LINK(ratescan start.sh)
 MANPAGE(ratescan "")
 
@@ -995,20 +1183,30 @@
 ADD_EXECUTABLE(sqmctrl src/sqmctrl.cc)
 TARGET_LINK_LIBRARIES(sqmctrl ${FACT++LIBS})
+INSTALL(TARGETS sqmctrl)
+INSTALL_LINK(sqmctrl start.sh)
 MANPAGE(sqmctrl "")
 
 ADD_EXECUTABLE(smartfact src/smartfact.cc)
 TARGET_LINK_LIBRARIES(smartfact ${FACT++LIBS}) # HAVE_NOVA
+INSTALL(TARGETS smartfact)
+INSTALL_LINK(smartfact start.sh)
 MANPAGE(smartfact "")
 
 ADD_EXECUTABLE(temperature src/temperature.cc)
 TARGET_LINK_LIBRARIES(temperature ${FACT++LIBS})
+INSTALL(TARGETS temperature)
+INSTALL_LINK(temperature start.sh)
 MANPAGE(temperature "")
 
 ADD_EXECUTABLE(timecheck src/timecheck.cc)
 TARGET_LINK_LIBRARIES(timecheck ${FACT++LIBS})
+INSTALL(TARGETS timecheck)
+INSTALL_LINK(timecheck start.sh)
 MANPAGE(timecheck "")
 
 ADD_EXECUTABLE(tngweather src/tngweather.cc)
 TARGET_LINK_LIBRARIES(tngweather ${FACT++LIBS} ${Qt}::${QtXml})
+INSTALL(TARGETS tngweather)
+INSTALL_LINK(tngweather start.sh)
 MANPAGE(tngweather "")
 
@@ -1059,4 +1257,7 @@
         ${QWT_LIBRARY} ZLIB::ZLIB)
 
+INSTALL(TARGETS viewer)
+INSTALL_LINK(viewer)
+
 #ENDIF(NOT TOOLS_ONLY OR VIEWER_ONLY)
 
@@ -1094,4 +1295,6 @@
 	${QWT_LIBRARY} ZLIB::ZLIB)
 
+INSTALL(TARGETS fact)
+INSTALL_LINK(fact)
 
 #dclient5_SOURCES = src/dclient5.cc src/LocalControl.h
@@ -1122,28 +1325,36 @@
 	ADD_EXECUTABLE(famousbias famous/src/famousbias.cc)
 	TARGET_LINK_LIBRARIES(famousbias ${FACT++LIBS})
+        INSTALL(TARGETS famousbias)
+        INSTALL_LINK(famousbias start.sh)
 	MANPAGE(famousbias "")
 
 	ADD_EXECUTABLE(famousui famous/ui/famousui.cc)
 	TARGET_LINK_LIBRARIES(famousui ${FACT++LIBS})
+        INSTALL(TARGETS famousui)
+        INSTALL_LINK(famousui start.sh)
 	MANPAGE(famousui "")
 
 	ADD_EXECUTABLE(ftuctrl famous/src/ftuctrl.cc)
 	TARGET_LINK_LIBRARIES(ftuctrl ${FACT++LIBS})
+        INSTALL(TARGETS ftuctrl)
+        INSTALL_LINK(ftuctrl start.sh)
 	MANPAGE(ftuctrl "")
-
-	ADD_EXECUTABLE(fpgaftmctrl famous/src/fpgaftmctrl.cc)
-	TARGET_LINK_LIBRARIES(fpgaftmctrl ${FACT++LIBS})
-	MANPAGE(fpgaftmctrl "")
 
 	ADD_EXECUTABLE(famousrate famous/src/famousrate.cc)
 	TARGET_LINK_LIBRARIES(famousrate ${FACT++LIBS})
+        INSTALL(TARGETS famousrate)
+        INSTALL_LINK(famousrate start.sh)
 	MANPAGE(famousrate "")
 
 	ADD_EXECUTABLE(famousscan famous/src/famousscan.cc)
 	TARGET_LINK_LIBRARIES(famousscan ${FACT++LIBS})
+        INSTALL(TARGETS famousscan)
+        INSTALL_LINK(famousscan start.sh)
 	MANPAGE(famousscan "")
 
 	ADD_EXECUTABLE(beaglectrl famous/src/beaglectrl.cc)
 	TARGET_LINK_LIBRARIES(beaglectrl ${FACT++LIBS} ${Qt}::${QtXml})
+        INSTALL(TARGETS beaglectrl)
+        INSTALL_LINK(beaglectrl start.sh)
  	MANPAGE(beaglectrl "")
 ENDIF()
@@ -1158,8 +1369,12 @@
 	ADD_EXECUTABLE(iceactpsu iceact/src/psuctrl.cc)
 	TARGET_LINK_LIBRARIES(iceactpsu ${FACT++LIBS})
+        INSTALL(TARGETS iceactpsu)
+        INSTALLLINK(iceactpsu start.sh)
 	MANPAGE(iceactpsu "")
 
 	ADD_EXECUTABLE(tmonctrl iceact/src/tmonctrl.cc)
 	TARGET_LINK_LIBRARIES(tmonctrl ${FACT++LIBS})
+        INSTALL(TARGETS tmonctrl)
+        INSTALL_LINK(tmonctrl start.sh)
 	MANPAGE(tmonctrl "")
 ENDIF()
@@ -1170,8 +1385,31 @@
 # *********************************
 
+SET(DNS "10.0.100.10" CACHE STRING "Default IP of the DNS used to create default fact++.rc")
+
+# Prepare the file for build interface
+SET(INSTALL_PREFIX ${CMAKE_BINARY_DIR})
+CONFIGURE_FILE(fact++.rc.in fact++.rc @ONLY)
+
+FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/rc)
+FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/log)
+
+IF(NOT CMAKE_INSTALL_PREFIX STREQUAL CMAKE_INSTALL_PREFIX_DEFAULT)
+
+    # Prepare default fact++.rc for installation
+    SET(INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
+    CONFIGURE_FILE(fact++.rc.in fact++rc.install @ONLY)
+    INSTALL(FILES ${CMAKE_BINARY_DIR}/fact++rc.install DESTINATION ${CMAKE_INSTALL_PREFIX} RENAME fact++.rc)
+
+    # Create empty directories during installation
+    INSTALL(DIRECTORY "log" DESTINATION ${CMAKE_INSTALL_PREFIX})
+    INSTALL(DIRECTORY "rc"  DESTINATION ${CMAKE_INSTALL_PREFIX})
+
+    INSTALL(CODE "MESSAGE(STATUS \"Preparing environment.\")")
+ENDIF()
+
+
 # ======== Setup directories ======
 
 # MESSAGE("")
-# MESSAGE("PREFIX:         "${CMAKE_INSTALL_PREFIX})
 # MESSAGE("")
 # MESSAGE("BINDIR:         "${CMAKE_INSTALL_FULL_BINDIR})
@@ -1206,32 +1444,7 @@
 # MESSAGE("")
 
-SET(PKG_SHARE    "${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}")
-SET(PKG_APPS     "${CMAKE_INSTALL_DATAROOTDIR}/applications")
-SET(PKG_PIXMAPS  "${CMAKE_INSTALL_DATAROOTDIR}/pixmaps")
-
-# ====== Installation targets =====
-
-IF (NOT VIEWER_ONLY)
-
-   INSTALL(TARGETS  fits2sql       DESTINATION "${CMAKE_INSTALL_BINDIR}")
-   INSTALL(TARGETS  zfits          DESTINATION "${CMAKE_INSTALL_BINDIR}")
-   INSTALL(TARGETS  showlog        DESTINATION "${CMAKE_INSTALL_BINDIR}")
-
-   IF(NOT NO_ROOT)
-      INSTALL(TARGETS  rootifysql     DESTINATION "${CMAKE_INSTALL_BINDIR}")
-      INSTALL(TARGETS  root2sql       DESTINATION "${CMAKE_INSTALL_BINDIR}")
-      INSTALL(TARGETS  root2csv       DESTINATION "${CMAKE_INSTALL_BINDIR}")
-      INSTALL(TARGETS  csv2root       DESTINATION "${CMAKE_INSTALL_BINDIR}")
-      INSTALL(TARGETS  fitsdump       DESTINATION "${CMAKE_INSTALL_BINDIR}")
-      INSTALL(TARGETS  calcsource     DESTINATION "${CMAKE_INSTALL_BINDIR}")
-      INSTALL(TARGETS  calcsourcemc   DESTINATION "${CMAKE_INSTALL_BINDIR}")
-   ENDIF()
-
-ENDIF(NOT VIEWER_ONLY)
-
-INSTALL(TARGETS  Configuration  DESTINATION "${CMAKE_INSTALL_LIBDIR}")
-INSTALL(TARGETS  Time           DESTINATION "${CMAKE_INSTALL_LIBDIR}")
-INSTALL(TARGETS  Tools          DESTINATION "${CMAKE_INSTALL_LIBDIR}")
-
+#SET(PKG_SHARE    "${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}")
+#SET(PKG_APPS     "${CMAKE_INSTALL_DATAROOTDIR}/applications")
+#SET(PKG_PIXMAPS  "${CMAKE_INSTALL_DATAROOTDIR}/pixmaps")
 
 #INSTALL(DIRECTORY ${PROJECT_BINARY_DIR}/html DESTINATION  "${PKG_SHARE}" FILES_MATCHING PATTERN "*.html")
