It turns out the headers were their, I just didn’t have access due to a 
permissions setting on the ‘inc’ directory itself. There are quite a few 
undefined symbols listed in the build log.

https://pastebin.com/dh1Wx67C <https://pastebin.com/dh1Wx67C>


Mark Brethen
mark.bret...@gmail.com



> On Aug 3, 2022, at 2:21 AM, Mark Brethen <mark.bret...@gmail.com> wrote:
> 
> I confirmed the bzip file contains the header files, however, the files are 
> missing in the workpath. And there is nothing unusual in the log to explain 
> what happened.
> 
> <main.log>
> 
> 
> Mark Brethen
> mark.bret...@gmail.com <mailto:mark.bret...@gmail.com>
> 
> 
> 
>> On Aug 2, 2022, at 6:20 PM, Robert Kennedy <am...@hotmail.com 
>> <mailto:am...@hotmail.com>> wrote:
>> 
>> Mark,
>> 
>> I was able to spend more time with your Makefile.  I corrected some typos.
>> 
>> Attached is the FINAL Makefile Rev 4 along with the patch file (that will 
>> patch the original Makefile)
>> 
>> It should work well for your purposes.
>> 
>> If you are having trouble with the extraction phase, please send me a copy 
>> of your Portfile and I will take a look.  It can be frustrating when things 
>> do not unpack as expected.\\
>> 
>> Rob
>> 
>> From: Mark Brethen <mark.bret...@gmail.com <mailto:mark.bret...@gmail.com>>
>> Sent: August 2, 2022 4:51 PM
>> To: Robert Kennedy <am...@hotmail.com <mailto:am...@hotmail.com>>
>> Cc: MacPorts Developers <macports-dev@lists.macports.org 
>> <mailto:macports-dev@lists.macports.org>>
>> Subject: Re: include files for cgxCADTools
>>  
>> I found the issue: There should be header files in 
>> ‘${workpath}/cgxCadTools/CadReader/inc’ but for some reason the extract 
>> phase is omitting them, i.e. the ‘inc’ directory is empty.
>> 
>> Why would it be doing this?
>> 
>> 
>> Mark Brethen
>> mark.bret...@gmail.com <mailto:mark.bret...@gmail.com>
>> 
>> 
>> 
>>> On Aug 2, 2022, at 2:52 PM, Robert Kennedy <am...@hotmail.com 
>>> <mailto:am...@hotmail.com>> wrote:
>>> 
>>> I missed one.  You also need to change:
>>> 
>>> $(CC) $(LDFLAGS) $(INCLUDES) -o $(MAIN) $(OBJS) $(LFLAGS) $(LIBS)
>>> 
>>> to
>>> 
>>> $(CCX) $(LDFLAGS) $(INCLUDES) -o $(MAIN) $(OBJS) $(LFLAGS) $(LIBS)
>>> 
>>> Rob
>>> From: Robert Kennedy <am...@hotmail.com <mailto:am...@hotmail.com>>
>>> Sent: August 2, 2022 3:46 PM
>>> To: Mark Brethen <mark.bret...@gmail.com <mailto:mark.bret...@gmail.com>>
>>> Subject: Re: include files for cgxCADTools
>>>  
>>> Mark,
>>> 
>>> Since it is a C++ project (not a C project), I modified the Makefile 
>>> accordingly. See attached.
>>> 
>>> Please note that I added LDFLAGS = -stdlib=libc++ and added $LDFLAGS to the 
>>> Makefile target that does the linking.
>>> 
>>> This is needed so the code will link properly on older macs (like my old 
>>> Mac running Lion).
>>> 
>>> Alternatively, you could add the following to the Portfile:
>>> configure.ldflags-append    "-stdlib=${configure.cxx_stdlib}"
>>> 
>>> Rob
>>> 
>>> From: Robert Kennedy <am...@hotmail.com <mailto:am...@hotmail.com>>
>>> Sent: August 2, 2022 3:03 PM
>>> To: Mark Brethen <mark.bret...@gmail.com <mailto:mark.bret...@gmail.com>>
>>> Subject: Re: include files for cgxCADTools
>>>  
>>> I forgot to mention that I normally change all the CFLAGS and LDFLAGS as 
>>> follows:
>>> 
>>> CFLAGS = blah blah
>>> CFLAGS += blah blah
>>> 
>>> This will allow Macports to add its own flags.
>>> 
>>> You do not need to do that with CC or CCX.
>>> 
>>> Rob
>>> From: Robert Kennedy <am...@hotmail.com <mailto:am...@hotmail.com>>
>>> Sent: August 2, 2022 3:00 PM
>>> To: Mark Brethen <mark.bret...@gmail.com <mailto:mark.bret...@gmail.com>>
>>> Subject: Re: include files for cgxCADTools
>>>  
>>> Mark,
>>> 
>>> I could not get the patch file to patch the Makefile.  So I manually 
>>> applied the patches.  And added my changes.  
>>> 
>>> Attached please find the FINAL Makefile and a patch file showing all the 
>>> diffs (including yours) from the original Makefile.  
>>> 
>>> I also did the following:
>>> Deleted all the dependencies, generated by makedepend below the "# DO NOT 
>>> DELETE THIS LINE -- make depend needs it" line.
>>> Added "macports" to .PHONY  (P.S.  PHONY targets provide rules that do not 
>>> directly build or link real binary objects.  They call on other targets 
>>> that build and link the actual code).
>>> Added the "macports" target:
>>> macports:   depend all  
>>> The rule for the Macports target is:
>>> 
>>> macports:   depend all  
>>> 
>>> When make macports is run, it will first run the "depend" target in the 
>>> Makefile and generate all the header dependencies and then it will run the 
>>> "all" target to build and link the code.
>>> 
>>> Now you have two choices as far as Macports is concerned:
>>> Just use the Makefile as is and see if the code builds and links.  It 
>>> likely will unless you are missing a header directory in $(INCLUDES).  OR
>>> Add the following to the Portfile which causes makedepend to run (which 
>>> will generate all those dependencies) before compiling and linking the code:
>>> depends_build       port:makedepend
>>> build.target        macports
>>> If the Makefile is doing all the building and linking for your Project, you 
>>> should probably also add the following to the Portfile:
>>> 
>>> PortGroup           makefile 1.0
>>> 
>>> I am working with a similar Makefile.  Both approaches above work for me.  
>>> Approach 1 runs a lot faster since it does not call on makedependto 
>>> generate all those header dependencies (which can take some time for a 
>>> large project).  And as mentioned in my previous posts to the Macports 
>>> mailing list, the compiler typically does NOT need to know about these 
>>> header dependencies to properly build and link the final binary product for 
>>> the first time.  
>>> 
>>> But the compiler does need to know the location of all the directories 
>>> where all the non-system headers can be found so when it processes an 
>>> #include in a source file, it can find the needed header.  The $(INCLUDES) 
>>> does not need to contain any of the directories where the system headers 
>>> are located since the compiler knows where they are.  And as you found out, 
>>> the location of the system headers will change from MacOS to MacOS.
>>> 
>>> I went with Approach 1 for my project.
>>> 
>>> P.S.  It looks like the project is using autotools or cmake to generate the 
>>> Makefile so you likely need to patch the Makefile at the end of the 
>>> configure stage or before building.  The most important thing is deleting 
>>> all those header dependencies at the end of the Makefile.
>>> 
>>> Good Luck.
>>> 
>>> Rob
>>> 
>>> 
>>> From: Mark Brethen <mark.bret...@gmail.com <mailto:mark.bret...@gmail.com>>
>>> Sent: August 2, 2022 1:34 PM
>>> To: Robert Kennedy <am...@hotmail.com <mailto:am...@hotmail.com>>
>>> Subject: Re: include files for cgxCADTools
>>>  
>>> Rob,
>>> 
>>> There is the line '.PHONY: depend clean' but 'make all’ only calls $(MAIN). 
>>> 
>>> Thanks,
>>> Mark
>>> 
>>> 
>>> 
>>>> On Aug 2, 2022, at 9:34 AM, Robert Kennedy <am...@hotmail.com 
>>>> <mailto:am...@hotmail.com>> wrote:
>>>> 
>>>> Mark,
>>>> 
>>>> To be clear, I would first try patching the Makefile by deleting all the 
>>>> system header dependencies from the Makefile and then see if  Macports 
>>>> will build the project.  But make sure the Makefile lists the location of 
>>>> all the directories where the header files are located.  (I typically 
>>>> place them in $(INCLUDES)).  And make sure the rules contain $(INCLUDES).
>>>> 
>>>> You typically do not need to list the directories of the system header 
>>>> files because  the compiler typically knows where they are (which as you 
>>>> know may change from MacOS to MacOS).
>>>> 
>>>> If you want to know why, keep reading....
>>>> 
>>>> Typically "make" only needs to know the following to build the initial 
>>>> Project from scratch:
>>>>  The rules that define what source code files are needed to build each 
>>>> object and a rule for linking the object files and the location of the 
>>>> directories for the header files (e.g. main.h).  
>>>> e.g
>>>> 
>>>>          INCLUDES := -I./ 
>>>> 
>>>> .PHONY all
>>>> 
>>>>          all:  edit
>>>>    
>>>> edit:  main.o kdb.o
>>>> $(CC) $(LDFLAGS) -o main.o kbd.o
>>>> 
>>>>          main.o: main.c myfunc.c
>>>> $(CC) $(CFLAGS) $(INCLUDES) -c main.c myfunc.c
>>>> 
>>>> kbd.o: kbd.c
>>>> $(CC) $(CFLAGS) $(INCLUDES) -c kbd.c
>>>> 
>>>> 
>>>> In the example above, the directories of the header files are in listed in 
>>>> $(INCLUDES).   
>>>> 
>>>> You do not need to list the directories of the system header files in 
>>>> $(INCLUDES) because the compiler knows where they are (which as you know 
>>>> may change from MacOS to MacOS).
>>>> 
>>>> Ideally, if you know that a particular header is a dependency for an 
>>>> object, it is better to list it in the rule (e.g.  main.o:  main.c 
>>>> myfunc.c main.h)  OR create a separate rule for the header dependency:
>>>> 
>>>> main.o:  main.h
>>>> 
>>>> But these header dependency rules are typically not needed to build the 
>>>> initial project from scratch!  These rules exist so "make" will only 
>>>> rebuild the minimum number of objects when a header file has changed.
>>>> 
>>>> E.g.  If I change header.h and then run "make all" again in the above 
>>>> example, make will only recompile main.o and then it will link main.o with 
>>>> the previously built kbd.o.  kbd.o does not need to be recompiled.  This 
>>>> saves time.  Great for development!
>>>> 
>>>> Macports does not do this.  It typically will rebuild the whole project 
>>>> from scratch. (i.e. build all the objects and then link them into the 
>>>> final product).
>>>> 
>>>> In my view, Macports was not designed for development but for building a 
>>>> finished project and making a binary package.  (i.e. package management)
>>>> 
>>>> If you are still having problems, please EMAIL me the Makefile and I will 
>>>> take a look.
>>>> 
>>>> RobK88
>>>> From: macports-dev <macports-dev-boun...@lists.macports.org 
>>>> <mailto:macports-dev-boun...@lists.macports.org>> on behalf of Robert 
>>>> Kennedy <am...@hotmail.com <mailto:am...@hotmail.com>>
>>>> Sent: August 2, 2022 8:10 AM
>>>> To: Mark Brethen <mark.bret...@gmail.com <mailto:mark.bret...@gmail.com>>; 
>>>> MacPorts Developers <macports-dev@lists.macports.org 
>>>> <mailto:macports-dev@lists.macports.org>>
>>>> Subject: Re: include files for cgxCADTools
>>>>  
>>>> Mark,
>>>> 
>>>> I agree with Josh, these headers look like they were automatically 
>>>> generated using something like "make depends".  
>>>> 
>>>> When creating a Makefile, it is GOOD practice to include these lines as it 
>>>> will ensure that the Project will rebuild the correct files when a header 
>>>> file was changed.  Since it is a REAL pain to create them manually.  Many 
>>>> developers use something like "make depends".
>>>> 
>>>> If there is a "depends:" target in the Makefile, you could patch the 
>>>> Makefile and add "depends" as the first Phony target to the "all:" target. 
>>>>  e.g.  
>>>> 
>>>> all:  depends main etc etc
>>>> 
>>>> Alternatively, you could try just patching the Makefile by removing all 
>>>> these lines (and any other line where a system header is the ONLY 
>>>> dependency in the rule).  The vast majority of time, they are NOT needed 
>>>> to build the initial project.  (They are needed if you want to use "make" 
>>>> to rebuild your project properly on subsequent runs where the developer 
>>>> has changed one of more of these system header files.  This is not a 
>>>> normal scenario if one is using Macports to build the project).
>>>> 
>>>> The most important rules are the rules involving the source code files 
>>>> (which must be kept).  
>>>> e.g.  $(OBJDIR-MAIN)/%.o: %.c
>>>>       $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
>>>> 
>>>> Make sure the Makfile has an "INCLUDES:" that lists the location of all 
>>>> the header files.  If it does, make will find them and build the initial 
>>>> project!
>>>> 
>>>> e.g. I am working on a new port where I converted an Xcode project to one 
>>>> using a Makefile.  I used "make depends" to generate these dependencies, 
>>>> Macports built the code just fine when I either:
>>>> Deleted all the lines below "# DO NOT DELETE THIS LINE -- make depend 
>>>> needs it"; or
>>>> Added "depends" as the first phony target to the all: phoney target 
>>>> e.g. all: depends utils altivec mpeg2enc main $(PRODUCT)
>>>> 
>>>> You could even patch the Makefile and add another target called "macports" 
>>>> and tell Macports to build that:
>>>> 
>>>>       macports:  depends all
>>>> 
>>>>       And in the portfile, you would add:
>>>> 
>>>> build.target        macports
>>>> 
>>>> Good luck,
>>>> 
>>>> Rob
>>>> 
>>>> 
>>>> From: macports-dev <macports-dev-boun...@lists.macports.org 
>>>> <mailto:macports-dev-boun...@lists.macports.org>> on behalf of Mark 
>>>> Brethen <mark.bret...@gmail.com <mailto:mark.bret...@gmail.com>>
>>>> Sent: August 1, 2022 8:51 PM
>>>> To: MacPorts Developers <macports-dev@lists.macports.org 
>>>> <mailto:macports-dev@lists.macports.org>>
>>>> Subject: Re: include files for cgxCADTools
>>>>  
>>>> I’ll ask the developer
>>>> 
>>>> Sent from my iPhone
>>>> 
>>>> > On Aug 1, 2022, at 4:53 PM, Joshua Root <j...@macports.org 
>>>> > <mailto:j...@macports.org>> wrote:
>>>> > 
>>>> > A lot of them aren't even standard headers; I believe the ones under 
>>>> > bits/ are glibc implementation details. I would suspect this part of the 
>>>> > Makefile was not hand-written but generated with one of the compiler's 
>>>> > -M options. To work correctly in that case, it would need to be 
>>>> > regenerated for each new system the software is built on.
>>>> > 
>>>> > - Josh
>>>> > 
>>>> >> On 2022-8-2 05:23 , Chris Jones wrote:
>>>> >> The makefile here is very poorly written. You should never directly 
>>>> >> reference standard headers like that…
>>>> >>>> On 1 Aug 2022, at 4:52 pm, Mark Brethen <mark.bret...@gmail.com 
>>>> >>>> <mailto:mark.bret...@gmail.com>> wrote:
>>>> >>> 
>>>> >>> This Makefile has the following lines:
>>>> >>> 
>>>> >>> CadReader.o: /usr/include/stdlib.h 
>>>> >>> /usr/include/bits/libc-header-start.h
>>>> >>> CadReader.o: /usr/include/features.h /usr/include/stdc-predef.h
>>>> >>> CadReader.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h
>>>> >>> CadReader.o: /usr/include/bits/long-double.h /usr/include/gnu/stubs.h
>>>> >>> CadReader.o: /usr/include/bits/waitflags.h 
>>>> >>> /usr/include/bits/waitstatus.h
>>>> >>> CadReader.o: /usr/include/bits/floatn.h /usr/include/sys/types.h
>>>> >>> CadReader.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h
>>>> >>> CadReader.o: /usr/include/bits/types/clock_t.h
>>>> >>> CadReader.o: /usr/include/bits/types/clockid_t.h
>>>> >>> CadReader.o: /usr/include/bits/types/time_t.h
>>>> >>> CadReader.o: /usr/include/bits/types/timer_t.h
>>>> >>> CadReader.o: /usr/include/bits/stdint-intn.h /usr/include/endian.h
>>>> >>> CadReader.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h
>>>> >>> CadReader.o: /usr/include/bits/byteswap-16.h
>>>> >>> CadReader.o: /usr/include/bits/uintn-identity.h 
>>>> >>> /usr/include/sys/select.h
>>>> >>> CadReader.o: /usr/include/bits/select.h 
>>>> >>> /usr/include/bits/types/sigset_t.h
>>>> >>> CadReader.o: /usr/include/bits/types/__sigset_t.h
>>>> >>> CadReader.o: /usr/include/bits/types/struct_timeval.h
>>>> >>> CadReader.o: /usr/include/bits/types/struct_timespec.h
>>>> >>> CadReader.o: /usr/include/sys/sysmacros.h /usr/include/bits/sysmacros.h
>>>> >>> CadReader.o: /usr/include/bits/pthreadtypes.h
>>>> >>> CadReader.o: /usr/include/bits/thread-shared-types.h
>>>> >>> CadReader.o: /usr/include/bits/pthreadtypes-arch.h 
>>>> >>> /usr/include/alloca.h
>>>> >>> CadReader.o: /usr/include/bits/stdlib-float.h
>>>> >>> 
>>>> >>> /usr/include doesn’t exist on Big Sure (I assume its deprecated?) 
>>>> >>> however, they can be found at
>>>> >>> 
>>>> >>> ~ $ xcrun --sdk macosx --show-sdk-path
>>>> >>> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.1.sdk
>>>> >>> 
>>>> >>> although I don’t see a ‘bits’ subdirectory. Has it been relocated?
>>>> >>> 
>>>> >>> Thanks,
>>>> >>> Mark
>>>> >>> 
>>>> >>> 
>>>> >>> 
>>>> >
>> 
>> <Final-Combined-Makefile-Patches - Rev 2.diff><Makefile FINAL-Rev4>
> 

Reply via email to