============================================================ Plan 0.25.0 Some thoughts inspired by talks with Michael Crogan - During development of huge projects it may make sense to always keep "installed" version of the software somewhere (FAKEPREFIX?) and always keep it synced. mk-configure needs a mechanism to always "install" after "all" and "uninstall" before "clean". Options: develop this in mk-c and make it optional feature; provide a mechanism for auto-depend one target from TARGETS from another one. In the latter case users will be able to implement this kind of things themself. (myall -> "myall-* : all-* .WAIT install-*) (myclean -> "myclean-* : uninstall-* .WAIT clean-*) - VARIANTS for libraries. - project "roundup" for testing - Better explain how "test" target works, maybe as a couple of slides in the PDF presentation. With and without mkc.minitest.mk. - One more example/ for TARGETS, demonstrating such things as "mkcmake release/debug/profile" or "mkcmake all_clang/all_gcc" or "valgrind_test"/"gcov_test" etc. - Additional slides in PDF for virtual subprojects. Notes about "virtual subproject" in examples/. - Notes in examples/hello_dictd and other examples based on mkc.subprj.mk about what mkc.subprj.mk really does. Reference (man page) is not enough for newcomers. Notes about clean-SUBPRJ, all-SUBPRJ etc. - Better explain ../Makefile.inc included automatically. For those who are not familiar with *BSD it is not obvious how to use it. - "errorcheck/configure" tests should be run in parallel. Something like shlock(1) or flock(1) is needed for this. - Example is needed for how to embed autoconf-based subproject into a project based on mk-configure. The sad fact is autoconf/automake is everywhere. So, it would be nice integrate mk-c into reality. mkc_imp.autotools.mk is needed for this. - Alternative .depend generation, e.g. like it is described in GNU make info files - Higher priority for fixing handling of dependencies between libraries and programs. In addition examples/ is needed for triggering rebuild of subproject if "something" was rebuild in another subproject (build script for example). - For better extensibility it makes sense to implement user-implementable pre_all, post_all, pre_install, post_install etc. targets. - Interdependencies between targetX-subprjA and targetY-subprjB (for example all-prject1 and install-prject2). Maybe this is cool idea for examples/ and slides. I need some good example for this. <<>>!!! - Steal cool features from Simon Gerraty's mk files and analyse "meta mode" he invented. - Better support for working without installation to /. -rpath, additional directories for objects, binaries and libs. Some "targets" from TARGETS should set MKCHECKS to "no" ronn(1) : markdown to man pages ----------------------------------------- gcc -L/usr/pkg/lib -R/usr/pkg/lib -o hello_lex hello_lex.o -ll yacc calc.y mv y.tab.c calc.c gcc -I/usr/pkg/include -c -o calc.o calc.c gcc -L/usr/pkg/lib -R/usr/pkg/lib -o hello_calc calc.o ERROR: cannot find program -y Cannot find bison, good bye! ------------------------------------------ custom test failed -> exit status of mkcmake should not be zero MKC_CUSTOM_ERR.qqqq -> error message before exiting just like mkcmake configure doesn't work New variable MKC_CUSTOM_ENV.xxx Add script_check to MKC_CHECK_CUSTOM Ex. MKC_CHECK_CUSTOM+= nested_funcs MKC_CUSTOM_FN.nested_funcs= nested_funcs.c MKC_CUSTOM_FN.script_check= checks/script_check - BINSUBDIR, LIBSUBDIR, LIBEXECSUBDIR etc... - Fix USE_SSP support for clang (-mllvm -stack-protector-buffer-size=1) - @sysconfdir@/mkc.conf - LDFLAGS vs. LDFLAGS in link.me (global paths before project's) - Reimplement linkme.mk. It is not flexible enough. - USE_RPATH - OBJCOPTS_ - Regression tests: * optional .f tests * optional .p tests * optional .m tests * optional(!) glib2 tests ============================================================ Plan 1) - Support for MKDEBUG like in NetBSD mk files - .lua.luac: - Implement mkc_imp.libtool.mk to build the shared libraries using GNU libtool(1). - MKSTRIP, STRIP, mkc_install: use STRIP, not STRIPPROG Slides for: - Slide "extensibility" about Lua module. - code specific to GNU ld(1) (.def?) ============================================================ Plan 2) - ./configure written in shell? - EXPORT_DYNAMIC_SYMBOLS - add the specified symbols to dynamic symbol table (GNU ld) - EXPORT_SYMBOLS_REGEXP - recheck documentation for Makefile.rec - Syllable, Haiku, OpenServer/UnixWare and HURD - lcc and tcc compilers - epm -> rpm, SVR4 pkg etc. - mkc_imp.filelist.mk - FL_NOPREFIX - FL_PERSUBPRJ - IRIX: "endianess" and EXPORT_SYMBOLS ============================================================ Plan 3) = sample for home-made .mk file (Ocaml? Pike?) = marker for user's custom tests that run generated executables, i.e. not ready for cross-compilation = symlinks to executables and libraries in ${OBJDIR}/{bin,lib} = support for gettext = xxxDIR variable for /var = mkclint? = Command line may be limited in size. Save defines to config.h and set HAVE_CONFIG_H to 1 for compiling. = MKC_NEED_FUNCLIBS - the same as MKC_SOURCE_FUNCLIBS but implementation is taken from mk-c. Ex: MKC_NEED_FUNCLIBS += strlcat strlcpy getline = MKC_CUSTOM_premk, MKC_CUSTOM_postmk = Online tutorial = shared libraries support for AIX, UnixWare, Hurd, Haiku. = shared libraries support for nwcc and other compilers. = Comparison with quagmire, kBuild, CMake, scons, waf, framewerk, pmk, MagicMakefiles, bjam, pymake etc. = Often compilers need special options to compile pthread code. Support for MKPTHREAD=yes|no is needed. = implement MANBZ2? = man page for mkc_check_compiler ============================================================ Plan 4) = EXPORT_SYMBOLS for HP-UX, AIX, SCO etc. = Single cache file as an automatically loaded (if exists) bmake makefile. = Targets bin_rpm, bin_epm = Targets src_tar, src_targz, src_tarbz2 = mkc.subdir.mk: - continue bulding even if some subprojects failed = MKC_CHECK_CUSTOM: - MKC_CUSTOM_FN=xxx.f - MKC_CUSTOM_FN=xxx.objc = Implement mkc.qt.mk = Implement mkc.doxygen.mk? ============================================================ Plan 5) = mkc.configure.mk functionality but for bourne shell, e.g. Upstream creates ./configure shell script: MKC_CONFIG_MK=mkc_config.mk MKC_CONFIG_H=mkc_config.h MKC_CHECK_HEADERS=' header1.h header2.h header3.h' MKC_CHECK_FUNCLIBS=' func1:lib1 func2 func3:lib3' #<...> . mkc_configure mkc_run # generating mkc_config.h and mkc_config.mk User runs ./configure ... make all = MKC_CHECK_DECL_TYPE (define, function|variable) = MKC_DEFINE_01 - -DHAVE_XXX=0 or -DHAVE_XXX=1 ============================================================ Plan 6) = MKC_BUILTINS (from autoconf): broken_free_NULL, exit_ret_int, isinf, isnan, malloc_0, putenv_xxx, realloc, signal, snprintf, sprintf, sscanf, strerror_r, strnlen, sysconf, unlink, unsetenv, va_copy, va_list, signed_shr, int_div, chown_minus_1,... (autoconf.info/Particular Function Checks) AC_FUNC_ALLOCA = autoconf (Portability of headers) = autoconf (Particular Header Checks)