################################################################# # # # Copyright 2012 Fidelity Information Services, Inc # # # # This source code contains the intellectual property # # of its copyright holder(s), and is made available # # under a license. If you do not know the terms of # # the license, please stop and do not read further. # # # ################################################################# # CMake 2.8.4 introduced LINK_DEPENDS target property # CMake 2.8.4 introduced generator expressions in custom commands # CMake 2.8.5 introduced use of C compiler as the assembler cmake_minimum_required(VERSION 2.8.5) project(GTM C ASM) set(version V5.5-000) if("${CMAKE_SIZEOF_VOID_P}" EQUAL 4) set(arch "x86") else() set(arch "x86_64") endif() set(GTM_INSTALL_DIR lib/fis-gtm/${version}_${arch} CACHE STRING "Install directory (under CMAKE_PREFIX_PATH if relative)") if(NOT GTM_INSTALL_DIR) set(GTM_INSTALL_DIR .) endif() # Max optimization level is -O2 get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES) foreach(lang ${languages}) get_property(flags CACHE CMAKE_${lang}_FLAGS_RELEASE PROPERTY VALUE) if("${flags}" MATCHES "-O[3-9]") string(REGEX REPLACE "-O[3-9]" "-O2" flags "${flags}") set_property(CACHE CMAKE_${lang}_FLAGS_RELEASE PROPERTY VALUE "${flags}") endif() endforeach() if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) endif() set(install_permissions_script OWNER_READ OWNER_EXECUTE OWNER_WRITE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE ) set(CMAKE_INCLUDE_FLAG_ASM "-Wa,-I") # gcc -I does not make it to "as" set(CMAKE_C_FLAGS # TODO: Use CMake 2.8.9 POSITION_INDEPENDENT_CODE abstraction for -fPIC in static libs "${CMAKE_C_FLAGS} -ansi -fsigned-char -fPIC -Wmissing-prototypes") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fno-defer-pop -fno-strict-aliasing -ffloat-store") add_definitions( #-DNOLIBGTMSHR #gt_cc_option_DBTABLD=-DNOLIBGTMSHR -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_XOPEN_SOURCE=600 -D_LARGEFILE64_SOURCE ) set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG) set(gt_src_list) set(gen_xfer_desc 0) if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") list(APPEND gt_src_list sr_linux) if("${CMAKE_SIZEOF_VOID_P}" EQUAL 4) list(APPEND gt_src_list sr_i386 sr_x86_regs sr_unix_nsb) else() list(APPEND gt_src_list sr_x86_64 sr_x86_regs) set(gen_xfer_desc 1) endif() endif() list(APPEND gt_src_list sr_unix_gnp sr_unix_cm sr_unix sr_port_cm sr_port ) set(includes) foreach(d ${gt_src_list}) list(APPEND includes ${GTM_SOURCE_DIR}/${d}) endforeach() include_directories(${includes}) include_directories(${GTM_BINARY_DIR}) function(select_file src_var name) set(found "") foreach(d ${gt_src_list}) set(src "${GTM_SOURCE_DIR}/${d}/${name}") if(EXISTS "${src}") set(found "${src}") break() endif() endforeach() if(NOT found) message(FATAL_ERROR "Cannot find \"${name}\" as ${ARGN}") endif() set("${src_var}" "${found}" PARENT_SCOPE) endfunction() foreach(d ${gt_src_list}) file(GLOB sources_${d} RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/${d} ${d}/*.c ${d}/*.s ${d}/*.si) endforeach() set(sources_used "") macro(set_source_list target) foreach(name ${ARGN}) set(src "") foreach(d ${gt_src_list}) if(";${sources_${d}};" MATCHES ";(${name}\\.(c|s|si));") set(src ${d}/${CMAKE_MATCH_1}) set("source_used_${CMAKE_MATCH_1}" 1) list(APPEND sources_used ${GTM_SOURCE_DIR}/${src}) break() endif() endforeach() if(src) list(APPEND ${target}_SOURCES ${src}) else() message(FATAL_ERROR "No source \"${name}\" available!") endif() endforeach() endmacro() macro(load_source_list target listfile) file(STRINGS "${listfile}" names) set_source_list(${target} ${names}) endmacro() #----------------------------------------------------------------------------- load_source_list(libcmisockettcp sr_unix_gnp/libcmisockettcp.list) load_source_list(libdbcertify sr_unix/libdbcertify.list) load_source_list(libdse sr_unix/libdse.list) load_source_list(libgnpclient sr_unix_gnp/libgnpclient.list) load_source_list(libgnpserver sr_unix_gnp/libgnpserver.list) load_source_list(libgtcm sr_unix_cm/libgtcm.list) load_source_list(liblke sr_unix/liblke.list) load_source_list(libmupip sr_unix/libmupip.list) load_source_list(libstub sr_unix/libstub.list) set_source_list(gtm_threadgbl_deftypes gtm_threadgbl_deftypes) set_source_list(dbcertify dbcertify dbcertify_cmd) set_source_list(dse dse dse_cmd) set_source_list(ftok ftok) set_source_list(geteuid geteuid) set_source_list(gtcm_gnp_server gtcm_gnp_server) set_source_list(gtcm_pkdisp gtcm_pkdisp) set_source_list(gtcm_play gtcm_play omi_srvc_xct) set_source_list(gtcm_server gtcm_main omi_srvc_xct) set_source_list(gtcm_shmclean gtcm_shmclean) set_source_list(gtmsecshr gtmsecshr_wrapper) set_source_list(gtmsecshr_real gtmsecshr) set_source_list(libgtmcrypt gtmcrypt_ref gtmcrypt_pk_ref gtmcrypt_dbk_ref) set_source_list(libgtmshr gtm_main) set_source_list(lke lke lke_cmd) set_source_list(maskpass maskpass) set_source_list(mumps gtm) set_source_list(mupip mupip mupip_cmd) set_source_list(semstat2 semstat2) #----------------------------------------------------------------------------- # libmumps gets leftover sources, so compute the remaining list. set(source_used_dtgbldir.c 1) # exclude unused source set(libmumps_SOURCES "") foreach(d ${gt_src_list}) foreach(s ${sources_${d}}) if(NOT source_used_${s}) list(APPEND libmumps_SOURCES ${d}/${s}) set(source_used_${s} 1) list(APPEND sources_used ${GTM_SOURCE_DIR}/${d}/${s}) endif() endforeach() endforeach() if(gen_xfer_desc) list(SORT sources_used) set(CMAKE_CONFIGURABLE_FILE_CONTENT "") foreach(src ${sources_used}) set(CMAKE_CONFIGURABLE_FILE_CONTENT "${CMAKE_CONFIGURABLE_FILE_CONTENT}${src}\n") endforeach() configure_file(${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in ${GTM_BINARY_DIR}/sources.list) add_custom_command( OUTPUT xfer_desc.i WORKING_DIRECTORY ${GTM_BINARY_DIR} DEPENDS ${GTM_SOURCE_DIR}/sr_unix/gen_xfer_desc.cmake ${GTM_BINARY_DIR}/sources.list COMMAND ${CMAKE_COMMAND} -D CMAKE_C_COMPILER=${CMAKE_C_COMPILER} -D "includes=${includes}" -P ${GTM_SOURCE_DIR}/sr_unix/gen_xfer_desc.cmake VERBATIM ) add_custom_target(gen_xfer_desc DEPENDS xfer_desc.i) endif() #----------------------------------------------------------------------------- add_executable(gtm_threadgbl_deftypes ${gtm_threadgbl_deftypes_SOURCES}) if(gen_xfer_desc) add_dependencies(gtm_threadgbl_deftypes gen_xfer_desc) endif() add_custom_command( OUTPUT gtm_threadgbl_deftypes.h DEPENDS gtm_threadgbl_deftypes COMMAND gtm_threadgbl_deftypes > gtm_threadgbl_deftypes.h.tmp COMMAND ${CMAKE_COMMAND} -E rename gtm_threadgbl_deftypes.h.tmp gtm_threadgbl_deftypes.h ) add_custom_target(gen_gtm_threadgbl_deftypes DEPENDS gtm_threadgbl_deftypes.h) foreach(exp exe shr) set(out gtm${exp}_symbols.export) set(in ${GTM_SOURCE_DIR}/sr_unix/gtm${exp}_symbols.exp) add_custom_command( OUTPUT ${out} DEPENDS ${in} COMMAND tcsh -f ${GTM_SOURCE_DIR}/sr_linux/genexport.csh ${in} ${out} ) endforeach() add_custom_target(gen_export DEPENDS gtmexe_symbols.export gtmshr_symbols.export) foreach(lib gtcm cmisockettcp gnpclient gnpserver dbcertify dse lke mupip stub mumps ) add_library(lib${lib} STATIC ${lib${lib}_SOURCES}) set_property(TARGET lib${lib} PROPERTY OUTPUT_NAME ${lib}) add_dependencies(lib${lib} gen_gtm_threadgbl_deftypes) endforeach() # TODO: find_package or find_library for system libs? target_link_libraries(libmumps -lelf -lncurses -lm -ldl -lpthread -lrt) add_executable(mumps ${mumps_SOURCES}) target_link_libraries(mumps libmumps) add_executable(dse ${dse_SOURCES}) target_link_libraries(dse libdse libmumps libstub) list(APPEND with_export dse) add_executable(dbcertify ${dbcertify_SOURCES}) target_link_libraries(dbcertify libdbcertify libmupip libmumps libstub) add_executable(geteuid ${geteuid_SOURCES}) add_executable(gtmsecshr ${gtmsecshr_SOURCES}) add_dependencies(gtmsecshr gen_gtm_threadgbl_deftypes) add_executable(gtmsecshr_real ${gtmsecshr_real_SOURCES}) target_link_libraries(gtmsecshr_real libmumps) set_target_properties(gtmsecshr_real PROPERTIES OUTPUT_NAME gtmsecshr RUNTIME_OUTPUT_DIRECTORY ${GTM_BINARY_DIR}/gtmsecshrdir ) add_dependencies(gtmsecshr_real gen_gtm_threadgbl_deftypes) add_executable(mupip ${mupip_SOURCES}) target_link_libraries(mupip libmupip libmumps libstub) list(APPEND with_export mupip) add_executable(lke ${lke_SOURCES}) target_link_libraries(lke liblke libmumps libgnpclient libmumps libgnpclient libcmisockettcp) add_executable(gtcm_server ${gtcm_server_SOURCES}) target_link_libraries(gtcm_server libgtcm libmumps libstub) add_executable(gtcm_gnp_server ${gtcm_gnp_server_SOURCES}) target_link_libraries(gtcm_gnp_server libgnpserver liblke libmumps libcmisockettcp libstub) add_executable(gtcm_play ${gtcm_play_SOURCES}) target_link_libraries(gtcm_play libgtcm libmumps libstub) add_executable(gtcm_pkdisp ${gtcm_pkdisp_SOURCES}) target_link_libraries(gtcm_pkdisp libgtcm libmumps libstub) add_executable(gtcm_shmclean ${gtcm_shmclean_SOURCES}) target_link_libraries(gtcm_shmclean libgtcm libmumps libstub) add_executable(semstat2 ${semstat2_SOURCES}) add_executable(ftok ${ftok_SOURCES}) target_link_libraries(ftok libmumps libstub) foreach(t ${with_export}) set_target_properties(${t} PROPERTIES LINK_FLAGS "-Wl,-u,gtm_filename_to_id -Wl,-u,gtm_zstatus -Wl,--version-script,\"${GTM_BINARY_DIR}/gtmexe_symbols.export\"" LINK_DEPENDS "${GTM_BINARY_DIR}/gtmexe_symbols.export" ) add_dependencies(${t} gen_export) endforeach() add_library(libgtmshr MODULE ${libgtmshr_SOURCES}) set_property(TARGET libgtmshr PROPERTY OUTPUT_NAME gtmshr) target_link_libraries(libgtmshr libmumps libgnpclient libcmisockettcp) set_target_properties(libgtmshr PROPERTIES LINK_FLAGS "-Wl,-u,gtm_ci -Wl,-u,gtm_filename_to_id -Wl,--version-script,\"${GTM_BINARY_DIR}/gtmshr_symbols.export\"" LINK_DEPENDS "${GTM_BINARY_DIR}/gtmshr_symbols.export" ) add_dependencies(libgtmshr gen_export) add_dependencies(mumps libgtmshr) add_library(libgtmcrypt MODULE ${libgtmcrypt_SOURCES}) set_target_properties(libgtmcrypt PROPERTIES OUTPUT_NAME gtmcrypt COMPILE_DEFINITIONS USE_GCRYPT LIBRARY_OUTPUT_DIRECTORY ${GTM_BINARY_DIR}/plugin ) target_link_libraries(libgtmcrypt gpg-error gpgme gcrypt) install(TARGETS libgtmcrypt DESTINATION ${GTM_INSTALL_DIR}/plugin) add_executable(maskpass ${maskpass_SOURCES}) target_link_libraries(maskpass gpg-error gpgme gcrypt) set_target_properties(maskpass PROPERTIES COMPILE_DEFINITIONS USE_GCRYPT RUNTIME_OUTPUT_DIRECTORY ${GTM_BINARY_DIR}/plugin/gtmcrypt ) install(TARGETS maskpass DESTINATION ${GTM_INSTALL_DIR}/plugin/gtmcrypt) foreach(f add_db_key.sh build.sh encrypt_sign_db_key.sh gen_keypair.sh gen_sym_hash.sh gen_sym_key.sh gtmcrypt.tab gtmcrypt_dbk_ref.c gtmcrypt_dbk_ref.h gtmcrypt_interface.h gtmcrypt_pk_ref.c gtmcrypt_pk_ref.h gtmcrypt_ref.c gtmcrypt_ref.h gtmcrypt_sym_ref.h gtmxc_types.h import_and_sign_key.sh install.sh maskpass.c pinentry-gtm.sh pinentry.m pinentry.m ) set(f_in "${GTM_SOURCE_DIR}/sr_unix/${f}") set(f_out "${GTM_BINARY_DIR}/plugin/gtmcrypt/${f}") add_custom_command( OUTPUT "${f_out}" DEPENDS "${f_in}" COMMAND ${CMAKE_COMMAND} -E copy "${f_in}" "${f_out}" ) if("${f}" MATCHES "\\.sh$") set(permissions PERMISSIONS ${install_permissions_script}) else() set(permissions "") endif() install(FILES "${f_out}" DESTINATION ${GTM_INSTALL_DIR}/plugin/gtmcrypt ${permissions}) list(APPEND files_to_place "${f_out}") endforeach() install(TARGETS mumps dse lke geteuid gtcm_server gtcm_gnp_server gtcm_pkdisp gtcm_play gtcm_shmclean semstat2 ftok gtmsecshr mupip libgtmshr DESTINATION ${GTM_INSTALL_DIR} ) install(TARGETS gtmsecshr_real DESTINATION ${GTM_INSTALL_DIR}/gtmsecshrdir) # .m -> .m #file(GLOB m_files_sr_port RELATIVE ${GTM_SOURCE_DIR}/sr_port ${GTM_SOURCE_DIR}/sr_port/*.m) set(m_files_sr_port gde.m gdeadd.m gdechang.m gdedelet.m gdeexit.m gdehelp.m gdeinit.m gdelocks.m gdelog.m gdemap.m gdemsgin.m gdeparse.m gdequit.m gderenam.m gdescan.m gdesetgd.m gdeshow.m gdespawn.m gdetempl.m ) file(GLOB m_files_sr_unix RELATIVE ${GTM_SOURCE_DIR}/sr_unix ${GTM_SOURCE_DIR}/sr_unix/*.m) file(GLOB mpt_files_sr_port RELATIVE ${GTM_SOURCE_DIR}/sr_port ${GTM_SOURCE_DIR}/sr_port/*.mpt) file(GLOB mpt_files_sr_unix RELATIVE ${GTM_SOURCE_DIR}/sr_unix ${GTM_SOURCE_DIR}/sr_unix/*.mpt) set(gtm_chset_dir_ "") set(gtm_chset_dir_UTF-8 "/utf8") foreach(d sr_port sr_unix) foreach(m ${m_files_${d}}) get_filename_component(m_name "${m}" NAME_WE) string(TOUPPER "${m_name}" m_upper) if("${m}" MATCHES "^gde") foreach(gtm_chset "" "UTF-8") set(m_out "${GTM_BINARY_DIR}${gtm_chset_dir_${gtm_chset}}/${m_upper}.m") add_custom_command( OUTPUT "${m_out}" DEPENDS ${GTM_SOURCE_DIR}/${d}/${m} COMMAND ${CMAKE_COMMAND} -E copy ${GTM_SOURCE_DIR}/${d}/${m} "${m_out}" ) list(APPEND files_to_place "${m_out}") list(APPEND gtm_chset_routines_${gtm_chset} "${m_out}") endforeach() else() set(m_out "${GTM_BINARY_DIR}/${m_upper}.m") add_custom_command( OUTPUT "${m_out}" DEPENDS ${GTM_SOURCE_DIR}/${d}/${m} COMMAND ${CMAKE_COMMAND} -E copy ${GTM_SOURCE_DIR}/${d}/${m} "${m_out}" ) install(FILES "${m_out}" DESTINATION ${GTM_INSTALL_DIR}) list(APPEND files_to_place "${m_out}") endif() endforeach() foreach(m ${mpt_files_${d}}) string(TOUPPER "_${m}" m_upper) string(REGEX REPLACE "MPT$" "m" m_out "${GTM_BINARY_DIR}/${m_upper}") add_custom_command( OUTPUT "${m_out}" DEPENDS ${GTM_SOURCE_DIR}/${d}/${m} COMMAND ${CMAKE_COMMAND} -E copy ${GTM_SOURCE_DIR}/${d}/${m} "${m_out}" ) install(FILES "${m_out}" DESTINATION ${GTM_INSTALL_DIR}) list(APPEND files_to_place "${m_out}") endforeach() endforeach() set(files) foreach(f gtm_descript.h gtm_limits.h gtm_sizeof.h gtm_stdio.h gtm_stdlib.h gtm_string.h gtm_strings.h gtmxc_types.h main_pragma.h arch.gtc gtcm_run.gtc gtcm_slist.gtc gdedefaults.gtc gtmcshrc.gtc gtmprofile.gtc gtmprofile_preV54000.gtc gtmstart.gtc gtmstop.gtc dse.hlp gde.hlp lke.hlp mumps.hlp mupip.hlp ) select_file(src ${f}) list(APPEND files ${src}) endforeach() install(FILES ${files} DESTINATION ${GTM_INSTALL_DIR}) set(scripts) foreach(f gtm.gtc gtmbase.gtc ) select_file(src ${f}) list(APPEND scripts ${src}) endforeach() install(FILES ${scripts} DESTINATION ${GTM_INSTALL_DIR} PERMISSIONS ${install_permissions_script} ) find_program(ICUCONFIG NAMES icu-config) if(ICUCONFIG) execute_process( COMMAND ${ICUCONFIG} --version OUTPUT_VARIABLE icu_version RESULT_VARIABLE icu_failed OUTPUT_STRIP_TRAILING_WHITESPACE ) if(icu_failed) message(FATAL_ERROR "Command\n ${ICUCONFIG} --version\nfailed (${icu_failed}).") elseif("x${icu_version}" MATCHES "^x([0-9]+\\.[0-9]+)") set(gtm_icu_version "${CMAKE_MATCH_1}") else() message(FATAL_ERROR "Command\n ${ICUCONFIG} --version\nproduced unrecognized output:\n ${icu_version}") endif() else() message(FATAL_ERROR "Unable to find 'icu-config'. Set ICUCONFIG in CMake cache.") endif() if (gtm_icu_version GREATER 10) message("libicu version ${gtm_icu_version} > 10") string(REGEX REPLACE "([0-9])([0-9]).*" "\\1.\\2" gtm_icu_version "${gtm_icu_version}") message("Fixing gtm_icu_version to ${gtm_icu_version}.\nThis had better be the default") endif() foreach(gtm_chset "" "UTF-8") foreach(in ${gtm_chset_routines_${gtm_chset}}) string(REPLACE ".m" ".o" out "${in}") get_filename_component(out_dir "${out}" PATH) add_custom_command( OUTPUT ${out} DEPENDS ${in} ${GTM_SOURCE_DIR}/sr_unix/mumps.cmake mumps COMMAND ${CMAKE_COMMAND} -D gtm_dist=${GTM_BINARY_DIR} -D gtmroutines=. -D gtm_chset=${gtm_chset} -D gtm_icu_version=${gtm_icu_version} -D mumps=$ -D "args=${in}" -P ${GTM_SOURCE_DIR}/sr_unix/mumps.cmake WORKING_DIRECTORY ${out_dir} VERBATIM ) list(APPEND files_to_place ${out}) install(FILES "${out}" DESTINATION ${GTM_INSTALL_DIR}${gtm_chset_dir_${gtm_chset}}) endforeach() endforeach() #----------------------------------------------------------------------------- set(gtm_hlp mumps.hlp) set(gde_hlp gde.hlp) foreach(help gtm gde) set(CMAKE_CONFIGURABLE_FILE_CONTENT "Change -segment DEFAULT -block=2048 -file=\$gtm_dist/${help}help.dat Change -region DEFAULT -record=1020 -key=255 exit") configure_file(${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in ${GTM_BINARY_DIR}/${help}help.in1) set(CMAKE_CONFIGURABLE_FILE_CONTENT "Do ^GTMHLPLD ${GTM_SOURCE_DIR}/sr_port/${${help}_hlp} Halt") configure_file(${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in ${GTM_BINARY_DIR}/${help}help.in2) set(env -D gtm_dist=${GTM_BINARY_DIR} -D gtmroutines=. -D gtmgbldir=${GTM_BINARY_DIR}/${help}help ) add_custom_command( OUTPUT ${help}help.dat ${help}help.gld DEPENDS ${GTM_SOURCE_DIR}/sr_unix/mumps.cmake mumps mupip ${GTM_BINARY_DIR}/${help}help.in1 ${GTM_BINARY_DIR}/${help}help.in2 COMMAND ${CMAKE_COMMAND} -E remove ${help}help.dat ${help}help.gld COMMAND ${CMAKE_COMMAND} ${env} -D mumps=$ -D "args=-run;GDE" -D input_file=${GTM_BINARY_DIR}/${help}help.in1 -P ${GTM_SOURCE_DIR}/sr_unix/mumps.cmake COMMAND ${CMAKE_COMMAND} ${env} -D mumps=$ -D "args=create" -P ${GTM_SOURCE_DIR}/sr_unix/mumps.cmake COMMAND ${CMAKE_COMMAND} ${env} -D mumps=$ -D "args=-direct" -D input_file=${GTM_BINARY_DIR}/${help}help.in2 -P ${GTM_SOURCE_DIR}/sr_unix/mumps.cmake VERBATIM ) list(APPEND files_to_place ${help}help.dat ${help}help.gld) install(FILES ${GTM_BINARY_DIR}/${help}help.dat DESTINATION ${GTM_INSTALL_DIR}) install(FILES ${GTM_BINARY_DIR}/${help}help.gld DESTINATION ${GTM_INSTALL_DIR}) endforeach() #----------------------------------------------------------------------------- set(GTM_TOP "${GTM_BINARY_DIR}") configure_file(sr_unix/gpgagent.tab.in plugin/gpgagent.tab @ONLY) set(GTM_TOP "${CMAKE_INSTALL_PREFIX}/${GTM_INSTALL_DIR}") configure_file(sr_unix/gpgagent.tab.in CMakeFiles/plugin/gpgagent.tab @ONLY) install(FILES ${GTM_BINARY_DIR}/CMakeFiles/plugin/gpgagent.tab DESTINATION ${GTM_INSTALL_DIR}/plugin) install(FILES sr_unix/configure.gtc DESTINATION ${GTM_INSTALL_DIR} PERMISSIONS ${install_permissions_script} RENAME configure ) install(FILES sr_unix/gtminstall.sh DESTINATION ${GTM_INSTALL_DIR} PERMISSIONS ${install_permissions_script} RENAME gtminstall ) install(FILES sr_unix/lowerc_cp.sh DESTINATION ${GTM_INSTALL_DIR} RENAME lowerc_cp ) install(FILES COPYING DESTINATION ${GTM_INSTALL_DIR}) install(FILES sr_port/README.txt DESTINATION ${GTM_INSTALL_DIR}) add_custom_target(place_files ALL DEPENDS ${files_to_place}) #----------------------------------------------------------------------------- # Generate files depending on gtm # Copy generation routines to a working directory. foreach(m chk2lev.m chkop.m gendash.m genout.m loadop.m loadvx.m msg.m tttgen.m tttscan.m) add_custom_command( OUTPUT gen/${m} DEPENDS ${GTM_SOURCE_DIR}/sr_port/${m} COMMAND ${CMAKE_COMMAND} -E copy ${GTM_SOURCE_DIR}/sr_port/${m} ${GTM_BINARY_DIR}/gen/${m} ) endforeach() set(mumps_ttt_args -run tttgen ${GTM_SOURCE_DIR}/sr_unix/ttt.txt ${GTM_SOURCE_DIR}/sr_port/opcode_def.h ${GTM_SOURCE_DIR}/sr_port/vxi.h ) add_custom_command( OUTPUT gen/ttt.c DEPENDS ${GTM_SOURCE_DIR}/sr_unix/ttt.txt gen/chk2lev.m gen/chkop.m gen/gendash.m gen/genout.m gen/loadop.m gen/loadvx.m gen/tttgen.m gen/tttscan.m ${GTM_SOURCE_DIR}/sr_unix/mumps.cmake mumps WORKING_DIRECTORY ${GTM_BINARY_DIR}/gen COMMAND ${CMAKE_COMMAND} -D gtm_dist=${GTM_BINARY_DIR} -D gtmroutines=. -D mumps=$ -D "args=${mumps_ttt_args}" -D output_file=ttt.log -P ${GTM_SOURCE_DIR}/sr_unix/mumps.cmake VERBATIM ) list(APPEND gen_bootstrap_files gen/ttt.c) foreach(msg sr_port/cmerrors.msg sr_port/gdeerrors.msg sr_port/merrors.msg sr_unix_gnp/cmierrors.msg ) get_filename_component(name ${msg} NAME_WE) set(mumps_msg_args -run msg ${GTM_SOURCE_DIR}/${msg} unix) add_custom_command( OUTPUT gen/${name}_ctl.c DEPENDS gen/msg.m ${GTM_SOURCE_DIR}/${msg} ${GTM_SOURCE_DIR}/sr_unix/mumps.cmake mumps WORKING_DIRECTORY ${GTM_BINARY_DIR}/gen COMMAND ${CMAKE_COMMAND} -D gtm_dist=${GTM_BINARY_DIR} -D gtmroutines=. -D mumps=$ -D "args=${mumps_msg_args}" -P ${GTM_SOURCE_DIR}/sr_unix/mumps.cmake VERBATIM ) list(APPEND gen_bootstrap_files gen/${name}_ctl.c) endforeach() add_custom_target(gen_bootstrap ALL DEPENDS ${gen_bootstrap_files})