tsdecrypt reads and decrypts CSA encrypted incoming mpeg transport stream over UDP/RTP using code words obtained from OSCAM or similar CAM server. tsdecrypt communicates with CAM server using cs378x (camd35 over tcp) protocol or newcamd protocol. https://georgi.unixsol.org/programs/tsdecrypt/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Makefile 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. CC = cc
  2. STRIP = strip
  3. CROSS := $(TARGET)
  4. MKDEP = $(CROSS)$(CC) -MP -MM -o $*.d $<
  5. RM = rm -f
  6. MV = mv -f
  7. BUILD_ID = $(shell date +%F_%R)
  8. VERSION = $(shell cat RELEASE)
  9. GIT_VER = $(shell git describe --tags --dirty --always 2>/dev/null)
  10. ifeq "$(GIT_VER)" ""
  11. GIT_VER = "release"
  12. endif
  13. ifndef V
  14. Q = @
  15. endif
  16. CFLAGS ?= -O2 -ggdb -pipe -ffunction-sections -fdata-sections \
  17. -W -Wall -Wextra \
  18. -Wshadow -Wformat-security -Wstrict-prototypes \
  19. -Wredundant-decls -Wold-style-definition
  20. uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
  21. LDFLAGS ?= -Wl,--gc-sections
  22. ifeq ($(uname_S),Darwin)
  23. LDFLAGS :=
  24. endif
  25. DEFS = -DBUILD_ID=\"$(BUILD_ID)\" \
  26. -DVERSION=\"$(VERSION)\" -DGIT_VER=\"$(GIT_VER)\"
  27. DEFS += -D_FILE_OFFSET_BITS=64
  28. PREFIX ?= /usr/local
  29. INSTALL_PRG = tsdecrypt
  30. INSTALL_PRG_DIR = $(subst //,/,$(DESTDIR)/$(PREFIX)/bin)
  31. INSTALL_DOC = tsdecrypt.1
  32. INSTALL_DOC_DIR = $(subst //,/,$(DESTDIR)/$(PREFIX)/share/man/man1)
  33. FUNCS_DIR = libfuncs
  34. FUNCS_LIB = $(FUNCS_DIR)/libfuncs.a
  35. TS_DIR = libtsfuncs
  36. TS_LIB = $(TS_DIR)/libtsfuncs.a
  37. tsdecrypt_SRC = data.c \
  38. csa.c \
  39. udp.c \
  40. util.c \
  41. filter.c \
  42. camd.c \
  43. camd-cs378x.c \
  44. camd-newcamd.c \
  45. process.c \
  46. tables.c \
  47. notify.c \
  48. tsdecrypt.c
  49. tsdecrypt_LIBS = -lcrypto -lpthread
  50. # If the file do not exist, libdvbcsa will be used
  51. -include FFdecsa.opts
  52. tsdecrypt_OBJS = $(FFDECSA_OBJ) $(FUNCS_LIB) $(TS_LIB) $(tsdecrypt_SRC:.c=.o)
  53. ifeq "$(shell uname -s)" "Linux"
  54. tsdecrypt_LIBS += -lcrypt -lrt
  55. endif
  56. ifeq "$(DECRYPT_LIB)" "ffdecsa"
  57. DEFS += -DDLIB=\"FFdecsa_$(FFDECSA_MODE)\"
  58. DEFS += -DUSE_FFDECSA=1
  59. else
  60. DEFS += -DDLIB=\"libdvbcsa\"
  61. DEFS += -DUSE_LIBDVBCSA=1
  62. tsdecrypt_LIBS += -ldvbcsa
  63. endif
  64. CLEAN_OBJS = $(FFDECSA_OBJ) tsdecrypt $(tsdecrypt_SRC:.c=.o) $(tsdecrypt_SRC:.c=.d)
  65. PROGS = tsdecrypt
  66. .PHONY: ffdecsa dvbcsa help distclean clean install uninstall
  67. all: $(PROGS)
  68. ffdecsa: clean
  69. $(Q)echo "Switching build to FFdecsa."
  70. @-if test -e FFdecsa.opts.saved; then $(MV) FFdecsa.opts.saved FFdecsa.opts; fi
  71. @-if ! test -e FFdecsa.opts; then ./FFdecsa_init "$(CROSS)" "$(CC)"; fi
  72. $(Q)$(MAKE) -s tsdecrypt
  73. ffdecsa_force:
  74. $(Q)$(RM) FFdecsa.opts
  75. $(Q)$(MAKE) -s ffdecsa
  76. dvbcsa: clean
  77. $(Q)echo "Switching build to libdvbcsa."
  78. @-if test -f FFdecsa.opts; then $(MV) FFdecsa.opts FFdecsa.opts.saved; fi
  79. $(Q)$(MAKE) -s tsdecrypt
  80. $(FUNCS_LIB): $(FUNCS_DIR)/libfuncs.h
  81. $(Q)echo " MAKE $(FUNCS_LIB)"
  82. $(Q)$(MAKE) -s -C $(FUNCS_DIR)
  83. $(TS_LIB): $(TS_DIR)/tsfuncs.h $(TS_DIR)/tsdata.h
  84. $(Q)echo " MAKE $(TS_LIB)"
  85. $(Q)$(MAKE) -s -C $(TS_DIR)
  86. tsdecrypt: $(tsdecrypt_OBJS)
  87. $(Q)echo " LINK tsdecrypt"
  88. $(Q)$(CROSS)$(CC) $(CFLAGS) $(LDFLAGS) $(DEFS) $(tsdecrypt_OBJS) $(tsdecrypt_LIBS) -o tsdecrypt
  89. %.o: %.c RELEASE
  90. @$(MKDEP)
  91. $(Q)echo " CC tsdecrypt $<"
  92. $(Q)$(CROSS)$(CC) $(CFLAGS) $(DEFS) -c $<
  93. FFdecsa/FFdecsa.o:
  94. $(Q)echo " MAKE FFdecsa"
  95. $(Q)$(MAKE) -s -C FFdecsa FLAGS=$(FFDECSA_FLAGS) PARALLEL_MODE=$(FFDECSA_MODE) COMPILER=$(CROSS)$(CC) FFdecsa.o
  96. -include $(tsdecrypt_SRC:.c=.d)
  97. strip:
  98. $(Q)echo " STRIP $(PROGS)"
  99. $(Q)$(CROSS)$(STRIP) $(PROGS)
  100. clean:
  101. $(Q)echo " RM $(CLEAN_OBJS)"
  102. $(Q)$(RM) $(CLEAN_OBJS)
  103. distclean: clean
  104. $(Q)$(MAKE) -s -C $(TS_DIR) clean
  105. $(Q)$(MAKE) -s -C $(FUNCS_DIR) clean
  106. $(Q)$(RM) FFdecsa.opts
  107. install: all
  108. @install -d "$(INSTALL_PRG_DIR)"
  109. @install -d "$(INSTALL_DOC_DIR)"
  110. @echo "INSTALL $(INSTALL_PRG) -> $(INSTALL_PRG_DIR)"
  111. $(Q)-install $(INSTALL_PRG) "$(INSTALL_PRG_DIR)"
  112. @echo "INSTALL $(INSTALL_DOC) -> $(INSTALL_DOC_DIR)"
  113. $(Q)-install --mode 0644 $(INSTALL_DOC) "$(INSTALL_DOC_DIR)"
  114. uninstall:
  115. @-for FILE in $(INSTALL_PRG); do \
  116. echo "RM $(INSTALL_PRG_DIR)/$$FILE"; \
  117. rm "$(INSTALL_PRG_DIR)/$$FILE"; \
  118. done
  119. @-for FILE in $(INSTALL_DOC); do \
  120. echo "RM $(INSTALL_DOC_DIR)/$$FILE"; \
  121. rm "$(INSTALL_DOC_DIR)/$$FILE"; \
  122. done
  123. help:
  124. $(Q)echo -e "\
  125. tsdecrypt $(VERSION) ($(GIT_VER)) build\n\n\
  126. Build targets:\n\
  127. tsdecrypt|all - Build tsdecrypt with whatever decryption library was chosen\n\
  128. \n\
  129. dvbcsa - Build tsdecrypt with libdvbcsa [default]\n\
  130. ffdecsa - Build tsdecrypt with shipped FFdecsa.\n\
  131. \n\
  132. install - Install tsdecrypt in PREFIX ($(PREFIX))\n\
  133. uninstall - Uninstall tsdecrypt from PREFIX\n\
  134. \n\
  135. Cleaning targets:\n\
  136. clean - Remove tsdecrypt generated files but keep the decryption\n\
  137. library config\n\
  138. distclean - Remove all generated files and reset decryption library to\n\
  139. dvbcsa.\n\
  140. \n\
  141. make V=1 Enable verbose build\n\
  142. make PREFIX=dir Set install prefix\n"