QMake - pass variable to child projects - qt

I have a qmake project with these project files:
. parent1.pro
. parent2.pro
. child_common.pro
parent1 and parent2 are both subdirs project and have child_common as a subdir.
Is there a way for me to define a variable usable by child_common that have a different value based on which parent the child is used by?
For instance: if I'm compiling parent1, child_common should have a variable MY_VAR=A. If I'm compiling parent2 it should have MY_VAR=B

Well, in fact it's not how the things are supposed to be done (as qmake never allows to pass its variables onto the SUBDIRS subprojects), so you may eventually end up having two separate child_common instances. However, if all your projects belong to the same directory subtree, you can make use of the qmake's cache file in the following way.
First, create an empty cache file in your common root subdirectory: touch .qmake.cache (or .qmake.stash, or .qmake.super). Then add the following to all your "parent" projects:
MY_VAR = A # or B
cache(MY_VAR, set) # or "set stash", or "set super"
Now MY_VAR should be visible inside any of your subprojects, as long as the cache file exists in the parent directory. But notice that the changes of the cache contents do not automatically imply the (sub)project rebuild.

Related

How to include dependent projects XML-comment files during a publish?

When I use the "normal" "Publish-tool" built into Visual Studio for ASP.net, it seems like it does not include XML-comment-files that belongs to dependent projects/assemblies.
For instance, lets say we have two projects:
Presentation = The Web-application
Definitions = A project
containing definitions of models
The presentation-project has a dependency to the Definition-project.
The presentation-project has XML-comments enabled, and so does the Definition-project (for all configurations).
The presentation-project has a few comments added to the actions of its controller(s).
The definition-project has a few comments added to the properties of the model(s).
The expected result would be that when I publish the Presentation-project, we should end up with two XML- files in the bin folder:
Presentation.xml
Definitions.xml
The names might of course alter if any other name has been specified in the build-properties of each project.
The actual result is that only Presentation.xml is published to the bin-folder.
I have tried to link resulting Definitions.xml-file to the Presentation-project as setting it as "Content" and to always copy, that ended up in the file getting copied to the root-folder of the application during a publish and not the /bin-folder.
I have tried the same thing but linked it into the bin-folder of the Presentation-project, but that ened up with the result of the Definitions.xml-file ending up at /bin/bin/Definitions.xml.
I have tried linking and setting Always, but that did nothing.
Here is a simple sample that can be used to reconstruct the problem:
https://github.com/Inx51/publishdemo
However.. one thing to notice is that the Definitions.xml-file is indeed copied to the /bin-folder during build, but its not copied once using publish.
Anyone that has a workaround for this strange behaviour?
Edit your project XML file, .csproj/.vbproj, and include this in the first PropertyGroup:
<ExcludeXmlAssemblyFiles>false</ExcludeXmlAssemblyFiles>
This will include all the .xml of all dependent assemblies.

How to discover default target in make?

I've seen the question "How does “make” app know default target to build if no target is specified?", which explains that the default target is the first target that doesn't being with a '.'.
How do I get make to tell me what that target is?
Context: I've got a recursive make system, with a variety of included makefiles. If I add a new target to my top level Makefile (or to my common include), that becomes the default target. I want to add .DEFAULT_GOAL: original-default-target, but I don't know what original-default-target is.
Running make -d results in a lot of debug output. If you search this for the first occurrence of 'Updating goal targets', and look at the next target mentioned, this appears to be the default target.
For example:
$ make -d | grep -A2 -m1 'goal targets'
Updating goal targets....
Considering target file 'all'.
File 'all' does not exist.
This implies that, for this Makefile at least, the current default target is all. This can then be enforced by adding .DEFAULT_GOAL: all to the top-level Makefile.

How to set JSHint options on per directory basis

I see that the ability to specify JSHint options on a per directory basis was added here.
However it is not clear to me how you actually take advantage of this. What do I do to set JSH options in a single directory, so that the options differ from other directories?
It appears that the change in question actually allows you to specify overriding options on a per-file basis. You can add an overrides property to your config, the value of which should be an object. The keys of this object are treated as regular expressions against which file names are tested. If the name of the file being analysed matches an overrides regex then the options specified for that override will apply to that file:
There's an example of this in the cli.js test file diff in the commit you linked to:
{
"asi": true,
"overrides": {
"bar.js$": {
"asi": false
}
}
}
In that example there is a single override which will apply to any files that match the bar.js$ regular expression (which looks like a bit of an oversight, since the . will match any character and presumably was intended to only match a literal . character).
Having said all that, it doesn't look like the overrides property is going to help you. I think what you actually want is a new .jshintrc file in the directory in question. JSHint looks for that file starting in the directory of the file being analysed and moves up the directory tree until it finds one. Whichever it finds first is the one that gets used. From the docs:
In case of .jshintrc, JSHint will start looking for this file in the same directory as the file that's being linted. If not found, it will move one level up the directory tree all the way up to the filesystem root.
A common use case for this is to have separate JSHint configurations for your application code and your test code. This allows you to define the different environments and globals separately.

Why can't Xcode 4 find my .h files during a build?

I have a project that won't build because the compiler (?) can't seem to find the .h files. I have tried using the full path, relative path and setting the Project Search Paths (both Header and User Header) and nothing seems to work. What I find very strange is even with the full path it gives an error: No such file or directory (the file does indeed exist in the specified path).
What could be the problem?
import statements:
#import <Foundation/Foundation.h>
#import <zxing/common/Counted.h>
#import <zxing/Result.h>
#import <zxing/BinaryBitmap.h>
#import <zxing/Reader.h>
#import <zxing/ResultPointCallback.h>
Headers are located in:
/Users/rolfmarsh/iPhoneCodeLibrary/BarcodeLibrary/zxing-1.6/cpp/core/src/zxing
Header search path is:
$(inherited)
"$(SRCROOT)/zxing/common"
and
/Users/rolfmarsh/iPhoneCodeLibrary/BarcodeLibrary/zxing-1.6/cpp/core/src
Full path of the include files:
/Users/rolfmarsh/iPhoneCodeLibrary/BarcodeLibrary/zxing-1.6/cpp/core/src/zxing/Result.h
I also had quite a bit of pain with ZXing's dependencies. Here's some tips that will hopefully be of assistance to others with similar issues.
This line does an import:
#import <zxing/common/Counted.h>
For the compiler to find Counted.h, the header search path must be specified.
Now, because the import statement will look for Counted.h relative to two subfolders zxing/common, we need to give it the parent folder of zxing.
In this case, the parent folder is going to be something like:
/ .. my full path here ../cpp/core/src/
So, under the src directory you'll find zxing.
How do we configure this in Xcode? Best to do it relatively. Otherwise, the project will fail on a different user's machine.
To do this, we specify a path relative to the project directory. As follows:
$(PROJECT_DIR)/../cpp/core/src
That goes in the Header Search Path of Build Settings for the ZXingWidget target.
The crucial thing with this header path stuff is to specify the relative directory to search from. In our case, we specify search relative to $(PROJECT_DIR). That variable specifies the directory of our subproject ZXingWidget.
Other caveats. Be careful to specify these in the build settings of your target. If you do it at project level you'll still need to specify it at target level using the $(inherited) variable.
Also, don't forget that the build transcript can be very useful. Look at the header paths included with the -I flag.
As a general debugging technique, I like to specify the absolute path in my settings. That gives a clean build and I know that the files can be included, and where they definitely are. Having done that I then use the $(PROJECT_DIR) to specify a relative path.
I am posting this in order to make things simple for newbies like me that are integrating zxing qr reader in their projects and to bring closure to a couple of threads related to zxing integration.
1.
Main thing - Be absolutely sure you have the latest version.
http://zxing.googlecode.com/svn/trunk/
[By now, January 18th, you will have no more issues with that zxing/common/ folder. Easiest fix for this: get the latest code!]
2.
Go to zxing -> iphone -> ZXingWidget.
Drag ZXingWidget.xcodeproj file and drop it onto the root of your Xcode project's "Groups and Files" sidebar.
[you should now have ZXingWidget.xcodeproj listed there and it has to drop down and list it's content]
3.
In the same place, project navigator, select:
Your project file - > Targets -> 'your project name' -> Build phases -> Link binary with libraries.
You should find a folder named 'Workspace'. Add 'libZXingWidget.a' from within.
4.
Still in Build phases, expand Target Dependencies and add ZXingWidget.
5.
Select Build Settings and search for Header Search Paths.
You need to add 2 records to Header Search Paths. You do not need to associate values to User Header Search Paths. You achieve this by double clicking the column on the right. A small popover window will apear. Use the + button to add the first record. Add:
../zxing/iphone/ZXingWidget/Classes
Now use the + button to add the second record. Add:
../zxing/cpp/core/src
These are the values I use. These values work because I use the same folder to host both my project and the zxing folder.
[Be sure to refer your folder properly in case you decide to have a different file structure.]
6.
Go back to Build Phases and add the following ios frameworks required:
AVFoundation
AudioToolbox
CoreVideo
CoreMedia
libiconv
AddressBook
AddressBookUI
7.
Create a set of files (.h&.m) and change it's .m extension to .mm
8.
Test the integration by including the following in the file previously created:
#import <ZXingWidgetController.h>
#import <QRCodeReader.h>
At this point you should run into missing files only if you are not running the latest version. Hope this helps.
Some things to check:
- file permissions
- can you build from the command line using xcodebuild?
I went over many blog posts on how to fix this. This one helped me well.
http://alwawee.com/wordpress/2011/12/01/zxingwidgetcontroller-h-not-found-zxing-installation-problem-solution/
The problem was that header search paths were not properly defined.
So I...
1) Downloaded zxing 2.1
2) From the download I copied: iphone, cpp, objc and readme and pasted in a folder names "zxing"
3) I added the new folder "zxing" to my project (on my mac) not to the xcode app.
4) From the created folder zxing I dragged the zxingwidget.xproje to my xcode project
5) I followed all the steps you find in all the blogs
KEY TO SOLVE THIS
6) I followed this steps for xcode errors https://stackoverflow.com/a/14703794/1881577
7) I followed this steps for header path file errors http://alwawee.com/wordpress/2011/12/01/zxingwidgetcontroller-h-not-found-zxing-installation-problem-solution/
IMPORTANT NOTE: I had to do follow step 7) twice, I had to select the project target and assign header paths, and I had to select the project project and assign header paths.
8) Build zxingwidget project (from the scheme select options)
9) Build Run the project.
Hope this helps other people as well.

ClearCase - find all the files that are viewed on a certain branch

In ClearCase, I would like to see a list of all the files that I am viewing on a certain branch (if I have branch Br I would like a list of all the files that I am viewing a version of them in that branch). Is that possible?
Why not just use...
cleartool find . -all -nvisible -element 'brtype(Br)' -print %CLEARCASE_PN%
The above is supposed to find all elements (even invisible to this view) with the branch BR, and print the pathnames.
The simplest solution would be to:
create a dynamic view
set the right config spec with the relevant element selection rules you want in order to list all the right files.
Don't forget a branch exists independently from files: when you create a branch, no file is affected. Only the file with at least one checked-out version will register in that branch (within their tree view).
See "How to find a Parent Label of a branch in Clearcase" for illustration.

Resources