include $(APPDIR)/Make.defs
PRIORITY = $(CONFIG_EXAMPLES_TLPI_PRIORITY)
STACKSIZE = $(CONFIG_EXAMPLES_TLPI_STACKSIZE)
MODULE = $(CONFIG_EXAMPLES_TLPI)
TLPI_DOWNLOAD_URL = https://github.com/bradfa/tlpi-dist/archive/refs/heads
TLPI_UNPACK = tlpi
TLPIDIR = $(APPDIR)/examples/tlpi/tlpi
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/daemons
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/filelock
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/files
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/lib
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/namespaces
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/pipes
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/procexec
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/procres
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/pty
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/seccomp
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/signals
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/sockets
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/svmsg
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/svsem
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/time
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/timers
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/tty
CFLAGS += ${INCDIR_PREFIX}$(TLPIDIR)/users_groups
CFLAGS += -Wno-strict-prototypes -Wno-unused-variable -Wno-unused-function \
-Wno-unused-but-set-variable -Wno-uninitialized
CSRCS += $(TLPIDIR)/filelock/create_pid_file.c \
$(TLPIDIR)/filelock/region_locking.c \
$(TLPIDIR)/files/file_perms.c \
$(TLPIDIR)/lib/alt_functions.c \
$(TLPIDIR)/lib/error_functions.c \
$(TLPIDIR)/lib/get_num.c
CSRCS += $(TLPIDIR)/procexec/print_wait_status.c \
$(TLPIDIR)/procres/print_rlimit.c
CSRCS += $(TLPIDIR)/pty/pty_master_open.c
CSRCS += $(TLPIDIR)/signals/signal.c \
$(TLPIDIR)/signals/signal_functions.c \
$(TLPIDIR)/sockets/inet_sockets.c \
$(TLPIDIR)/sockets/rdwrn.c \
$(TLPIDIR)/sockets/read_line.c \
$(TLPIDIR)/sockets/read_line_buf.c \
$(TLPIDIR)/sockets/scm_functions.c \
$(TLPIDIR)/sockets/sendfile.c \
$(TLPIDIR)/sockets/unix_sockets.c
CSRCS += $(TLPIDIR)/time/curr_time.c \
$(TLPIDIR)/timers/itimerspec_from_str.c \
$(TLPIDIR)/tty/tty_functions.c \
$(TLPIDIR)/users_groups/ugid_functions.c
MAINSRC += $(TLPIDIR)/altio/demo_sigio.c \
$(TLPIDIR)/altio/epoll_flags_fork.c \
$(TLPIDIR)/altio/epoll_input.c \
$(TLPIDIR)/altio/multithread_epoll_wait.c \
$(TLPIDIR)/altio/poll_pipes.c \
$(TLPIDIR)/altio/select_mq.c \
$(TLPIDIR)/altio/self_pipe.c \
$(TLPIDIR)/altio/t_select.c
MAINSRC += $(TLPIDIR)/cgroups/fork_bomb.c
MAINSRC += $(TLPIDIR)/daemons/t_syslog.c
MAINSRC += $(TLPIDIR)/dirs_links/file_type_stats.c \
$(TLPIDIR)/dirs_links/list_files.c \
$(TLPIDIR)/dirs_links/list_files_readdir_r.c \
$(TLPIDIR)/dirs_links/nftw_dir_tree.c \
$(TLPIDIR)/dirs_links/t_unlink.c \
$(TLPIDIR)/dirs_links/t_dirbasename.c
ifneq ($(CONFIG_FS_LINKS),)
MAINSRC += $(TLPIDIR)/dirs_links/bad_symlink.c \
$(TLPIDIR)/dirs_links/view_symlink.c
endif
MAINSRC += $(TLPIDIR)/filebuff/direct_read.c \
$(TLPIDIR)/filebuff/mix23_linebuff.c \
$(TLPIDIR)/filebuff/mix23io.c \
$(TLPIDIR)/filebuff/write_bytes.c
MAINSRC += $(TLPIDIR)/fileio/atomic_append.c \
$(TLPIDIR)/fileio/bad_exclusive_open.c \
$(TLPIDIR)/fileio/copy.c \
$(TLPIDIR)/fileio/large_file.c \
$(TLPIDIR)/fileio/multi_descriptors.c \
$(TLPIDIR)/fileio/seek_io.c \
$(TLPIDIR)/fileio/t_readv.c \
$(TLPIDIR)/fileio/t_truncate.c
MAINSRC += $(TLPIDIR)/filelock/i_fcntl_locking.c
MAINSRC += $(TLPIDIR)/files/t_chown.c \
$(TLPIDIR)/files/t_stat.c \
$(TLPIDIR)/files/t_umask.c \
$(TLPIDIR)/files/t_utime.c \
$(TLPIDIR)/files/t_utimes.c
MAINSRC += $(TLPIDIR)/filesys/t_statvfs.c \
$(TLPIDIR)/filesys/t_umount.c
MAINSRC += $(TLPIDIR)/getopt/t_getopt.c
ifneq ($(CONFIG_FS_NOTIFY),)
MAINSRC += $(TLPIDIR)/inotify/demo_inotify.c
endif
MAINSRC += $(TLPIDIR)/inotify/rand_dtree.c
ifneq ($(CONFIG_BUILD_KERNEL),)
MAINSRC += $(TLPIDIR)/memalloc/free_and_sbrk.c
endif
MAINSRC += $(TLPIDIR)/mmap/anon_mmap.c \
$(TLPIDIR)/mmap/mmcat.c \
$(TLPIDIR)/mmap/mmcopy.c \
$(TLPIDIR)/mmap/t_mmap.c
MAINSRC += $(TLPIDIR)/namespaces/hostname.c
MAINSRC += $(TLPIDIR)/pgsjc/handling_SIGTSTP.c
MAINSRC += $(TLPIDIR)/pipes/change_case.c \
$(TLPIDIR)/pipes/fifo_seqnum_client.c \
$(TLPIDIR)/pipes/fifo_seqnum_server.c
ifneq ($(CONFIG_LIBC_EXECFUNCS),)
MAINSRC += $(TLPIDIR)/pipes/pipe_ls_wc.c
endif
MAINSRC += $(TLPIDIR)/pipes/pipe_sync.c \
$(TLPIDIR)/pipes/simple_pipe.c
MAINSRC += $(TLPIDIR)/pmsg/mq_notify_sig.c \
$(TLPIDIR)/pmsg/mq_notify_siginfo.c
MAINSRC += $(TLPIDIR)/pmsg/mq_notify_via_signal.c
MAINSRC += $(TLPIDIR)/pmsg/pmsg_create.c
MAINSRC += $(TLPIDIR)/pmsg/pmsg_receive.c \
$(TLPIDIR)/pmsg/pmsg_send.c \
$(TLPIDIR)/pmsg/pmsg_unlink.c
MAINSRC += $(TLPIDIR)/proc/bad_longjmp.c \
$(TLPIDIR)/proc/display_env.c \
$(TLPIDIR)/proc/longjmp.c \
$(TLPIDIR)/proc/mem_segments.c \
$(TLPIDIR)/proc/modify_env.c \
$(TLPIDIR)/proc/necho.c \
$(TLPIDIR)/proc/setenv.c \
$(TLPIDIR)/proc/setjmp_vars.c \
$(TLPIDIR)/proc/t_getenv.c
MAINSRC += $(TLPIDIR)/procexec/child_status.c \
$(TLPIDIR)/procexec/envargs.c \
$(TLPIDIR)/procexec/exit_handlers.c
ifneq ($(CONFIG_BUILD_KERNEL),)
MAINSRC += $(TLPIDIR)/procexec/footprint.c
endif
MAINSRC += $(TLPIDIR)/procexec/fork_file_sharing.c \
$(TLPIDIR)/procexec/fork_stdio_buf.c \
$(TLPIDIR)/procexec/fork_sig_sync.c \
$(TLPIDIR)/procexec/fork_whos_on_first.c \
$(TLPIDIR)/procexec/make_zombie.c \
$(TLPIDIR)/procexec/multi_SIGCHLD.c \
$(TLPIDIR)/procexec/multi_wait.c \
$(TLPIDIR)/procexec/orphan.c
ifneq ($(CONFIG_LIBC_EXECFUNCS),)
MAINSRC += $(TLPIDIR)/procexec/closeonexec.c \
$(TLPIDIR)/procexec/t_execl.c \
$(TLPIDIR)/procexec/t_execle.c \
$(TLPIDIR)/procexec/t_execlp.c \
$(TLPIDIR)/procexec/t_execve.c
endif
MAINSRC += $(TLPIDIR)/procexec/t_fork.c \
$(TLPIDIR)/procexec/t_system.c \
$(TLPIDIR)/procexec/t_vfork.c \
$(TLPIDIR)/procexec/vfork_fd_test.c
MAINSRC += $(TLPIDIR)/procpri/demo_sched_fifo.c \
$(TLPIDIR)/procpri/sched_set.c \
$(TLPIDIR)/procpri/sched_view.c \
$(TLPIDIR)/procpri/t_sched_getaffinity.c \
$(TLPIDIR)/procpri/t_sched_setaffinity.c \
$(TLPIDIR)/procpri/t_setpriority.c
MAINSRC += $(TLPIDIR)/procres/rusage_wait.c
MAINSRC += $(TLPIDIR)/progconc/syscall_speed.c
ifneq ($(CONFIG_FS_NAMED_SEMAPHORES),)
MAINSRC += $(TLPIDIR)/psem/psem_create.c \
$(TLPIDIR)/psem/psem_getvalue.c \
$(TLPIDIR)/psem/psem_timedwait.c \
$(TLPIDIR)/psem/psem_trywait.c \
$(TLPIDIR)/psem/psem_post.c \
$(TLPIDIR)/psem/psem_unlink.c \
$(TLPIDIR)/psem/psem_wait.c
endif
MAINSRC += $(TLPIDIR)/psem/thread_incr_psem.c
MAINSRC += $(TLPIDIR)/pshm/pshm_create.c \
$(TLPIDIR)/pshm/pshm_read.c \
$(TLPIDIR)/pshm/pshm_unlink.c \
$(TLPIDIR)/pshm/pshm_write.c
ifneq ($(CONFIG_LIBC_DLFCN),)
MAINSRC += $(TLPIDIR)/shlibs/dynload.c
endif
MAINSRC += $(TLPIDIR)/signals/demo_SIGFPE.c \
$(TLPIDIR)/signals/ignore_pending_sig.c \
$(TLPIDIR)/signals/intquit.c
MAINSRC += $(TLPIDIR)/signals/ouch.c \
$(TLPIDIR)/signals/sig_receiver.c \
$(TLPIDIR)/signals/sig_sender.c \
$(TLPIDIR)/signals/sig_speed_sigsuspend.c \
$(TLPIDIR)/signals/sigmask_longjmp.c \
$(TLPIDIR)/signals/signalfd_sigval.c \
$(TLPIDIR)/signals/t_kill.c
MAINSRC += $(TLPIDIR)/signals/t_sigqueue.c \
$(TLPIDIR)/signals/t_sigsuspend.c
MAINSRC += $(TLPIDIR)/sockets/id_echo_cl.c
MAINSRC += $(TLPIDIR)/sockets/is_echo_cl.c \
$(TLPIDIR)/sockets/is_echo_inetd_sv.c
MAINSRC += $(TLPIDIR)/sockets/is_seqnum_cl.c \
$(TLPIDIR)/sockets/is_seqnum_sv.c \
$(TLPIDIR)/sockets/is_seqnum_v2_cl.c \
$(TLPIDIR)/sockets/is_seqnum_v2_sv.c \
$(TLPIDIR)/sockets/i6d_ucase_cl.c \
$(TLPIDIR)/sockets/i6d_ucase_sv.c \
$(TLPIDIR)/sockets/list_host_addresses.c
MAINSRC += $(TLPIDIR)/sockets/scm_cred_send.c
MAINSRC += $(TLPIDIR)/sockets/scm_multi_send.c \
$(TLPIDIR)/sockets/scm_rights_recv.c \
$(TLPIDIR)/sockets/scm_rights_send.c \
$(TLPIDIR)/sockets/socknames.c
MAINSRC += $(TLPIDIR)/sockets/t_getservbyname.c \
$(TLPIDIR)/sockets/ud_ucase_cl.c \
$(TLPIDIR)/sockets/ud_ucase_sv.c \
$(TLPIDIR)/sockets/us_abstract_bind.c \
$(TLPIDIR)/sockets/us_xfr_cl.c \
$(TLPIDIR)/sockets/us_xfr_sv.c \
$(TLPIDIR)/sockets/us_xfr_v2_cl.c \
$(TLPIDIR)/sockets/us_xfr_v2_sv.c
MAINSRC += $(TLPIDIR)/sysinfo/procfs_pidmax.c \
$(TLPIDIR)/sysinfo/procfs_user_exe.c \
$(TLPIDIR)/sysinfo/t_uname.c
MAINSRC += $(TLPIDIR)/svipc/svmsg_demo_server.c \
$(TLPIDIR)/svipc/t_ftok.c
MAINSRC += $(TLPIDIR)/svmsg/svmsg_chqbytes.c \
$(TLPIDIR)/svmsg/svmsg_create.c \
$(TLPIDIR)/svmsg/svmsg_file_client.c \
$(TLPIDIR)/svmsg/svmsg_file_server.c
MAINSRC += $(TLPIDIR)/svmsg/svmsg_receive.c \
$(TLPIDIR)/svmsg/svmsg_rm.c \
$(TLPIDIR)/svmsg/svmsg_send.c
ifneq ($(CONFIG_MM_SHM),)
MAINSRC += $(TLPIDIR)/svshm/svshm_attach.c \
$(TLPIDIR)/svshm/svshm_create.c
MAINSRC += $(TLPIDIR)/svshm/svshm_mon.c \
$(TLPIDIR)/svshm/svshm_rm.c
MAINSRC += $(TLPIDIR)/syslim/t_fpathconf.c
endif
ifneq ($(CONFIG_PTHREAD_SPINLOCKS),)
MAINSRC += $(TLPIDIR)/threads/detached_attrib.c \
$(TLPIDIR)/threads/one_time_init.c \
$(TLPIDIR)/threads/prod_condvar.c \
$(TLPIDIR)/threads/prod_no_condvar.c \
$(TLPIDIR)/threads/pthread_barrier_demo.c \
$(TLPIDIR)/threads/simple_thread.c \
$(TLPIDIR)/threads/strerror_test.c \
$(TLPIDIR)/threads/thread_cancel.c \
$(TLPIDIR)/threads/thread_cleanup.c \
$(TLPIDIR)/threads/thread_incr.c \
$(TLPIDIR)/threads/thread_incr_mutex.c \
$(TLPIDIR)/threads/thread_incr_rwlock.c \
$(TLPIDIR)/threads/thread_incr_spinlock.c \
$(TLPIDIR)/threads/thread_lock_speed.c \
$(TLPIDIR)/threads/thread_multijoin.c
endif
MAINSRC += $(TLPIDIR)/time/calendar_time.c \
$(TLPIDIR)/time/process_time.c \
$(TLPIDIR)/time/show_time.c \
$(TLPIDIR)/time/strtime.c
MAINSRC += $(TLPIDIR)/timers/cpu_burner.c \
$(TLPIDIR)/timers/cpu_multi_burner.c
MAINSRC += $(TLPIDIR)/timers/demo_timerfd.c \
$(TLPIDIR)/timers/ptmr_null_evp.c \
$(TLPIDIR)/timers/ptmr_sigev_signal.c \
$(TLPIDIR)/timers/ptmr_sigev_thread.c \
$(TLPIDIR)/timers/real_timer.c \
$(TLPIDIR)/timers/timed_read.c \
$(TLPIDIR)/timers/t_clock_nanosleep.c \
$(TLPIDIR)/timers/t_nanosleep.c
MAINSRC += $(TLPIDIR)/tty/demo_SIGWINCH.c \
$(TLPIDIR)/tty/new_intr.c \
$(TLPIDIR)/tty/no_echo.c \
$(TLPIDIR)/tty/test_tty_functions.c
ifneq ($(CONFIG_CRYPTO),)
MAINSRC += $(TLPIDIR)/users_groups/check_password.c
endif
MAINSRC += $(TLPIDIR)/users_groups/t_getpwent.c \
$(TLPIDIR)/users_groups/t_getpwnam_r.c
MAINSRC += $(TLPIDIR)/vdso/gettimeofday.c
MAINSRC += $(TLPIDIR)/vmem/madvise_dontneed.c
MAINSRC += $(TLPIDIR)/vmem/t_mprotect.c
PROGNAME := $(notdir $(patsubst %.c,%, $(MAINSRC)))
$(TLPI_UNPACK).zip:
$(call DOWNLOAD,$(TLPI_DOWNLOAD_URL),master.zip,tlpi.zip)
$(Q) unzip -o tlpi.zip
$(Q) rm -f tlpi.zip
$(Q) mv tlpi-dist-master $(TLPI_UNPACK)
$(Q) patch -d $(TLPI_UNPACK) -p1 < 0001-add-ename.c.inc.patch
$(Q) patch -d $(TLPI_UNPACK) -p1 < 0002-fix-setenv-compilation-error.patch
$(Q) patch -d $(TLPI_UNPACK) -p1 < 0003-fix-memoryleak-in-check_password.patch
$(Q) patch -d $(TLPI_UNPACK) -p1 < 0004-fix-compilation-error.patch
$(TLPI_UNPACK): $(TLPI_UNPACK).zip
ifeq ($(wildcard $(TLPI_UNPACK)/.git),)
context:: $(TLPI_UNPACK)
distclean::
$(Q) rm -rf $(TLPI_UNPACK)
endif
include $(APPDIR)/Application.mk