Import ('env')

env.Append (CPPFLAGS = env ['SIGNED_CHAR'])

SRC_LIB   = Split ("\
            acq_background.c acq_euler.c acq_pitch.c acq_pot.c adj_yr_day.c \
            adjust_time.c adv_tm_ptrs.c alloc_background.c alloc_exp.c alloc_euler.c \
            alloc_pitch.c alloc_pot.c alloc_spin_src.c alloc_spin_swp_times.c alloc_swp.c alloc_timing.c \
            assign_ptrs.c alloc_celestial.c acq_celestial.c ancillary_etime.c ancillary_los.c \
            background_dsrc.c background_frac.c background_status.c background_tbls.c \
            calc_tres.c chk_cal_size.c chk_crit_stat.c chk_dep_hdr.c chk_dep_thdr.c \
            chk_idf_mem.c chk_trange.c chk_tensor_mem.c combine_add.c constant_euler.c \
            combine_div.c combine_mult.c combine_pow.c combine_sub.c compute_pa.c constant_pa.c \
            constant_pot.c conv_background.c conv_cal.c conv_mode.c conv_pot.c \
            conv_sen.c conv_swp.c conv_units.c \
            copy_background.c copy_celestial.c copy_euler.c copy_pdata.c celestial_dsrc.c \
            celestial_status.c celestial_tbls.c \
            count_combo.c chk_stime.c create_data.c create_dstr.c create_spin_data.c \
            create_tdata.c create_tbl.c constant_celestial.c \
            celestial_frac.c constant_background.c \
            delta_combo.c destroy_last_data.c destroy_last_tdata.c \
            err_msg.c extra_days.c \
            euler_dsrc.c euler_frac.c euler_status.c euler_tbls.c \
            file_open.c file_pos.c file_setup.c fill_aarray.c \
            fill_cal_bit.c fill_cal_bit_asen.c fill_cal_bit_aswp.c fill_cal_bit_data.c \
            fill_cal_bit_sen.c fill_cal_bit_swp.c fill_cal_byte.c fill_darray.c \
            fill_tensor_darray.c find_end_spin_src.c find_start_spin.c find_start_spin_src.c \
            fine_search.c fix_ptrs.c first_sen.c \
            free_ancillary_data.c free_ex.c free_ex_str.c free_idf.c \
            free_mode_tbls.c free_pa_data.c free_pa_info.c free_pot_data.c free_pot_info.c \
            free_sen_tbls.c free_spin_src_data.c free_spin_src_info.c free_tensor.c \
            free_version.c free_euler_data.c free_euler_info.c frac_stime.c free_celestial_info.c \
            free_ex_noreset.c free_ex_str_noreset.c free_idf_noreset.c free_celestial_data.c \
            free_bkgd_data.c free_bkgd_info.c \
            get_const.c get_crit_info.c get_cur_tm.c get_euler_info.c get_pa_const.c \
            get_mode_info.c get_mode_tbl.c get_new_tbl.c get_pinfo.c get_pot_info.c \
            get_sen_tbls.c get_sinfo.c get_tbl_info.c get_vnum.c get_euler_const.C \
            get_celestial_const.c get_celestial_info.c get_background_info.c get_background_const.C \
            idf_add.c idf_and.c idf_div.c idf_ex_func.c idf_look.c idf_mod.c \
            idf_mult.c idf_or.c idf_shiftl.c idf_shiftr.c idf_sub.c idfs_pa.c idfs_pot.c \
            init_exper.c init_idfs.c init_sen_ptr.c init_sen_spin.c init_struct.c \
            init_transform.c inst_time.c intfp.c idfs_euler.c idfs_celestial.c idfs_background.c \
            last_time_val.c libbase_err_msg.c libtrec_err_msg.c locate_ex.c locate_ex_ptr.c \
            mode_tbl_sz.c \
            network.c new_data.c new_hdr.c next_file_tm.c next_idf.c new_idf_euler.c \
            new_idf.c new_idf_celestial.c new_idf_pa.c new_idf_pot.c new_idf_spin_src.c \
            new_idf_background.c num_of_cal.c \
            open_ancillary.c oper_asgn.c override_pot.c \
            pa_dsrc.c pa_status.c pa_tbls.c pback_dfiles.c \
            pitch_frac.c poly_exp.c pos_ancillary.c \
            pos_pback.c pos_rtime.c proc_bdata.c proc_edata.c proc_pdata.c proc_pot.c pot_dsrc.c pot_frac.c \
            pot_status.c pot_tbls.c proc_cdata.c \
            read_drec.c read_drec_adv.c read_drec_data.c read_drec_times.c \
            read_header.c read_hdr_fmt_one.c read_hdr_fmt_two.c read_drec_spin.c \
            read_drec_spin_angle.c read_drec_spin_src.c read_idf_once.c \
            read_idf_update.c read_tbl.c read_tensor.c \
            read_tensor_adv.c read_tensor_data.c read_tensor_times.c reset_exp.c \
            reset_hdr.c reset_set.c reset_thdr.c rtime_dfiles.c \
            same_btime.c same_ctime.c same_etime.c same_ptime.c samp_time.c select_sen.c sen_combo.c sen_start_spin.c \
            sen_start_spin_src.c start_ele.c sen_set_time.c set_fd_limit.c \
            set_time.c start_image.c start_spin.c swap_data.c spin_time_frac.c spin_az_const.c \
            spin_dsrc.c spin_los_nfile.c spin_src_stat.c spin_swp_times.c swp_times.c \
            spin_period_exceeded.c src_positioned.c status_msg.c \
            tbl_size.c textract.c time_comp.c tinsert.c to_sign.c trans_data.c trans_tdata.c \
            turn_off_pa.c turn_on_celestial.c turn_on_euler.c \
            unit_normals.c \
            valid_idf_data.c valid_tensor_data.c vidf_open.c")
    
HEADERS = Split ("gen_defs.h libbase_idfs.h ret_codes.h user_defs.h util_str.h\
                  trec_str.h pitch_str.h spin_str.h time_span_str.h potential_str.h\
                  euler_str.h swp_times.h celestial_str.h frac_defs.h idfs_transform.h\
                  libbase_codes.h libtrec_codes.h background_str.h ")

error_obj = env.Object ('get_error_str.c', CCFLAGS='-DIDFS_ERR', CPPPATH=env['CPPPATH'])  

LIBRARIES = ['VIDF', env ['DBLIBS'], 'Cfg', 'ant', env ['LEXLIB'], env ['CPPLIB'], 'm']
SHLIBRARIES = ['VIDF', env ['DB_SH_LIBS'], 'Cfg', 'ant', env ['LEXLIB'], 'm']
env.SDDASBuildLibrary ('libbase_idfs', SRC_LIB, HEADERS, SHLIBRARIES)

env.Program ('test_main', env.Object ('main.c') + error_obj,
             LIBS = ['base_idfs'] + LIBRARIES + env ['EXTRA_LIBS'],
             LIBPATH = ['.'] + env ['SDDAS_LIB'])
